【发布时间】:2012-04-18 09:29:19
【问题描述】:
如何在 C# 中发送 POST 而不等待响应? 我该怎么做?
请帮忙!
【问题讨论】:
-
你能解释一下你的问题吗?!
-
是的,我的问题是 url 泛滥
如何在 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);
}
但请注意,我没有测试此代码,因为我试图解决一个稍微不同的问题。
【讨论】:
【讨论】: