我正在尝试从我的 C# Windows 应用程序向我的网站发出 Web 请求,但是,当仅从 C# 调用而不是从按预期工作的网站调用时,所需的结果为空或 null。
在我执行请求之前,我需要从一个按预期工作并且确实返回正确值的login request
开始。
重要编辑:
我尝试将我的PHP
代码复制粘贴到我的login.php
文件中,它确实在 C# 中工作并返回正确的计数值。
我的HttpClient
配置不正确吗?
我的PHP
测试代码如下所示:
<?php
session_start();
if(!isset($_SESSION['user'])){ header("Location: index.php"); }
include_once 'dbconnect.php'; //contains $db
$sql = "SELECT * FROM myTable"; //contains two rows
$sql_res = mysqli_query($db, $sql);
$proxyCount = mysqli_num_rows($sql_res);
$echo "Count: ".$proxyCount;
?>
我的C#
看起来像这样:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net.Http;
using ModernHttpClient;
using Newtonsoft.Json;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void log(string str)
{
logbox.AppendText(str + Environment.NewLine);
}
private string host = "http://www.mywebsite.com/";
private HttpClient httpClient = new HttpClient(new NativeMessageHandler());
private async Task<string> request(string target, Dictionary<string, string> _parameters)
{
string uri = host + target;
using (HttpResponseMessage response = await httpClient.PostAsync(uri, new FormUrlEncodedContent(_parameters)))
return new StreamReader(await response.Content.ReadAsStreamAsync()).ReadToEnd();
}
private async void button1_Click(object sender, EventArgs e)
{
string loginResp = await request("login.php", new Dictionary<string, string> { { "username", "user" }, { "password", "password" } });
log(loginResp);
}
private async void button2_Click(object sender, EventArgs e)
{
string proxiesResp = await request("proxy/proxy.php", new Dictionary<string, string> { { "getAllProxyRequests", "" } });
//above returns "count: " in C#, but returns "count: 2" in webbrowser
log(proxiesResp);
}
}
}
发现问题,是人为错误。
我让文件dbconnect.php
位于myProblem.php
所在的目录下方的一个目录。
我不得不改变台词说
include_once 'dbconnect.php';
自
include_once '../dbconnect.php';