如何在 C# 中发送 POST 而不等待响应?我该怎么做?
请帮忙!
使用WebClient
类中的一种异步方法,例如UploadStringAsync
.
当帖子完成(或失败)时,将触发相应的事件(UploadStringCompleted
例如),但您不必为该事件连接任何处理程序。但是,您可能希望这样做以检查是否有任何错误。
HTTP 会话只是一个标准的 TCP 会话,而 POST 只是符合 HTTP 规范的格式正确的数据。您可以打开与 Web 服务器的 TCP 连接并发送 POST 请求,然后关闭 TCP 连接。您可以查看 HTTP 规范 (RFC 2616) 以了解如何正确格式化 POST。您可以在以下网址找到它:http ://www.w3.org/Protocols/rfc2616/rfc2616.html
一个非常基本的 POST 将通过 TCP 连接发送以下内容:
POST / HTTP/1.1
Host: www.thehost.com
Content-Length: 3
Content-Type: application/x-www-form-urlencoded
Hi!
用您要发送的任何内容替换内容和相应的长度,将 / 更改为正确的路径并将主机的主机名或 IP 放在 Host:... 并当然将 TCP 会话连接到该主机。
一个非常基本的例子:
using System.Net;
using System.Net.Sockets;
static void Main(string[] args)
{
string Hostname = "www.website.com";
TcpClient Client = new TcpClient(Hostname, 80);
Client.Client.Send(new ASCIIEncoding().GetBytes("POST / HTTP/1.1\nHost: "+Hostname+"\nConnection: close\n\n"));
Client.Close();
}
将 www.website.com 更改为正确的主机名(以及端口,如果需要)。
UploadValuesAsync 看起来像一个更完整的解决方案,使用如下内容:
using (var client = new WebClient())
{
var values = new NameValueCollection();
// add values...
client.UploadValuesAsync(new System.Uri(rawUrl), "POST", values);
}
但是请注意,我没有测试过这段代码,因为我试图解决一个稍微不同的问题。
var wc = new WebClient(); wc.Headers["Content-type"] = "application/x-www-form-urlencoded"; wc.UploadStringAsync(uri, data); wc.UploadStringCompleted += (sender, e) => { // 完全的 };