0

如何在 C# 中发送 POST 而不等待响应?我该怎么做?

请帮忙!

4

4 回答 4

3

使用WebClient类中的一种异步方法,例如UploadStringAsync.

当帖子完成(或失败)时,将触发相应的事件(UploadStringCompleted例如),但您不必为该事件连接任何处理程序。但是,您可能希望这样做以检查是否有任何错误。

于 2012-04-18T09:34:48.283 回答
2

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 更改为正确的主机名(以及端口,如果需要)。

于 2012-04-18T09:32:54.223 回答
1

UploadValuesAsync 看起来像一个更完整的解决方案,使用如下内容:

using (var client = new WebClient())
{
    var values = new NameValueCollection();
    // add values...
    client.UploadValuesAsync(new System.Uri(rawUrl), "POST", values);
}

但是请注意,我没有测试过这段代码,因为我试图解决一个稍微不同的问题。

于 2015-03-17T12:50:00.460 回答
0
var wc = new WebClient();
wc.Headers["Content-type"] = "application/x-www-form-urlencoded";
wc.UploadStringAsync(uri, data);
wc.UploadStringCompleted += (sender, e) =>
{
    // 完全的
};
于 2012-04-18T09:38:07.390 回答