2011-07-11 84 views
4

我需要发送POST HTTP请求到服务器,但它不应该期待响应。我应该使用什么方法?发送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

如果你使用的是HTTP协议,是一个响应。

然而,它并不需要是一个非常大的反应:

HTTP/1.1 200 OK 
Date: insert date here 
Content-Length: 0 
\r\n 
+0

嗨,是有办法,我可以只发送一个请求,并没有得到回应的。在我的情况下,GetResponse()方法发送一个请求并等待响应。我不想要第二部分。我只需要发送请求。 – CuriousCoder

+7

阅读我的答案。 HTTP需要响应。期。如果你不需要它,不要使用HTTP,实现你自己的协议。 –

2

参考this答案。

你在找什么,我认为是火与忘记模式。

0

HTTP需要Mike Caron已经提到的响应。但作为一个快速(肮脏)的修复,你可以捕捉到“连接意外关闭”错误并继续。

0

如果您的服务器正常,您可以随时使用RAW套接字发送请求,然后关闭它。

0

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

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); 

}

相关问题