2011-07-11 82 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); 

}

相關問題