向服务器发送HTTP请求而不期望响应

8

我需要向服务器发送一个不需要响应的POST http请求,应该使用哪种方法?

我一直在使用

 WebRequest request2 = WebRequest.Create("http://local.ape-project.org:6969");
 request2.Method = "POST";
 String sendcmd = "[{\"cmd\":\"SEND\",\"chl\":3,\"params\":{\"msg\":\"Helloworld!\",\"pipe\":\"" + sub1 + "\"},\"sessid\":\"" + sub + "\"}]";
 byte[] byteArray2 = Encoding.UTF8.GetBytes(sendcmd);
 Stream dataStream2 = request2.GetRequestStream();
 dataStream2.Write(byteArray2, 0, byteArray2.Length);
 dataStream2.Close();
 WebResponse response2 = request2.GetResponse();

发送请求并获取响应是很好的,如果请求将从服务器获得响应,则可以正常工作。但是,对于我的需求,我只需要发送一个POST请求。并且与我发送的请求没有关联的响应。我该怎么办?

如果我使用request2.GetRespnse()命令,则会出现错误:“连接意外关闭”

任何帮助都将不胜感激。谢谢

6个回答

12
如果你使用HTTP协议,就必须有一个响应。不过,响应并不需要非常大:
HTTP/1.1 200 OK
Date: insert date here
Content-Length: 0
\r\n

1
你好,有没有一种方法可以只发送请求而不获取任何响应。在我的情况下,GetResponse()方法发送请求并等待响应。我不需要第二部分,我只需要发送请求。 - CuriousCoder
7
阅读我的回答。HTTP需要响应,这是必须的。如果你不想要响应,就不要使用HTTP,实现你自己的协议。 - Mike Caron
1
@MikeCaron 所以服务器必须发送响应,OP 不需要关心。 - Menasheh

3

请参考这个答案。

我认为你要找的是“Fire and Forget”模式。


2

正如Mike Caron所提到的那样,HTTP需要响应。但是作为一个快速(脏)的解决方法,您可以捕获“连接意外关闭”的错误并继续执行。


1
如果您的服务器支持,您可以始终使用原始套接字发送请求,然后关闭它。

0

看一下这个,可能会有帮助。

public static void SetRequest(string mXml)
{
    HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.CreateHttp("http://dork.com/service");
    webRequest.Method = "POST";
    webRequest.Headers["SOURCE"] = "WinApp";

    // Decide your encoding here

    //webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.ContentType = "text/xml; charset=utf-8";

    // You should setContentLength
    byte[] content = System.Text.Encoding.UTF8.GetBytes(mXml);
    webRequest.ContentLength = content.Length;

    var reqStream = await webRequest.GetRequestStreamAsync();
    reqStream.Write(content, 0, content.Length);

    var res = await httpRequest(webRequest);

}


0

如果您不想等待响应,可以在另一个线程中发送数据或者简单地使用WebClient.UploadStringAsync,但请注意,响应总是在请求之后发生。使用另一个线程进行请求允许您忽略响应处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接