7 c#
我正在尝试制作一个程序,通过 POST 中的用户名、密码、硬件 ID 和密钥来请求我的网站。
我这里有这段代码,应该使用该表单数据向我的网站发送 POST 请求,但是当它发送时,我的网络服务器报告说它没有收到 POST 数据
try
{
string poststring = String.Format("username={0}&password={1}&key={2}&hwid={3}", Username, Password, "272453745345934756392485764589", GetHardwareID());
HttpWebRequest httpRequest =
(HttpWebRequest)WebRequest.Create("mywebsite");
httpRequest.Method = "POST";
httpRequest.ContentType = "application/x-www-form-urlencoded";
byte[] bytedata = Encoding.UTF8.GetBytes(poststring);
httpRequest.ContentLength = bytedata.Length;
Stream requestStream = httpRequest.GetRequestStream();
requestStream.Write(bytedata, 0, bytedata.Length);
requestStream.Close();
HttpWebResponse httpWebResponse =
(HttpWebResponse)httpRequest.GetResponse();
Stream responseStream = httpWebResponse.GetResponseStream();
StringBuilder sb = new StringBuilder();
using (StreamReader reader =
new StreamReader(responseStream, System.Text.Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
sb.Append(line);
}
}
return sb.ToString();
}
catch (Exception Error)
{
return Error.ToString();
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我,我将非常感激。
aep*_*pot 11
根据HttpWebRequest文档
我们不建议您用于
HttpWebRequest新开发。相反,使用System.Net.Http.HttpClient类。
HttpClient仅包含异步 API,因为 Web 请求需要等待。在等待响应时冻结整个应用程序并不好。
因此,这里有一些异步函数来发出POST请求HttpClient并向那里发送一些数据。
首先,HttpClient单独创建,因为
HttpClient旨在每个应用程序实例化一次,而不是每次使用。
private static readonly HttpClient client = new HttpClient();
Run Code Online (Sandbox Code Playgroud)
然后实现该方法。
private async Task<string> PostHTTPRequestAsync(string url, Dictionary<string, string> data)
{
using (HttpContent formContent = new FormUrlEncodedContent(data))
{
using (HttpResponseMessage response = await client.PostAsync(url, formContent).ConfigureAwait(false))
{
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者 C# 8.0
private async Task<string> PostHTTPRequestAsync(string url, Dictionary<string, string> data)
{
using HttpContent formContent = new FormUrlEncodedContent(data);
using HttpResponseMessage response = await client.PostAsync(url, formContent).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)
看起来比你的代码更容易,对吧?
调用者异步方法看起来像
private async Task MyMethodAsync()
{
Dictionary<string, string> postData = new Dictionary<string, string>();
postData.Add("message", "Hello World!");
try
{
string result = await PostHTTPRequestAsync("http://example.org", postData);
Console.WriteLine(result);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你不熟悉async/await,是时候打个招呼了。
| 归档时间: |
|
| 查看次数: |
15386 次 |
| 最近记录: |