2017-06-26 113 views
0

我需要爲我正在創建的應用程序(用於在線聊天的自定義封裝)發送一系列獲取/發佈請求。我通過鬆散地模擬從Telerik Fiddler記錄的請求,完成了網站登錄過程和初始聊天加載。如何在C#中模擬此請求請求#

現在我遇到了不同的帖子請求問題,即將用戶註冊爲在線。

這是一個到socket.io服務器的連接,但我知道有可能沒有套接字連接,因爲當我用Fiddler的「作曲家」功能發送請求時,一切正常。

這裏是我試圖模擬

POST http://events.********.com/socket.io/1/xhr-polling/vLaINOG3fKixnNs-oTWq?t=1498442322413 HTTP/1.1 
Host: events.********.com 
Connection: keep-alive 
Content-Length: 144 
Origin: http://www.********.com 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 
Content-type: text/plain;charset=UTF-8 
Accept: */* 
Referer: http://www.********.com/home.php 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 

5:::{"name":"updateUserStatus","args":[{"status":"online"}]} 

這裏是它的外觀試圖模仿它(忽略不同的URL,它應該有這方面的工作)

POST http://events.********.com/socket.io/1/xhr-polling/owR02QZlrwKOwcLjoTW8 HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
Host: events.********.com 
Content-Length: 60 
Expect: 100-continue 

5:::{"name":"updateUserStatus","args":[{"status":"online"}]} 

顯然有很多的要求缺少的東西,但我不認爲它最重要。我注意到,原始請求的頭文件的內容類型設置爲「text/plain」,儘管我已經嘗試了很多方法來更改接受和內容類型標頭以匹配,但它總是作爲應用程序/ json和404結果。image

我覺得我錯過了一些非常明顯和愚蠢的東西,但是我在過去的幾個小時裏一直在排除故障,並且無法計算出任何結果。

下面是我使用該請求的代碼(我拿出「text/plain的」 Content-Type和其他的東西,在這之前沒有工作,我有那麼它有點清潔劑)

chatreq = (HttpWebRequest)WebRequest.Create("http://events.********.com/socket.io/1/xhr-polling/" + socket); 
chatreq.CookieContainer = cookieContainer; 
postData = "5:::{\"name\":\"updateUserStatus\",\"args\":[{\"status\":\"online\"}]}"; 
data = Encoding.ASCII.GetBytes(postData); 
chatreq.Method = "POST"; 
chatreq.ContentType = "application/x-www-form-urlencoded"; 
chatreq.ContentLength = data.Length; 
using (var stream = chatreq.GetRequestStream()) 
{ 
    stream.Write(data, 0, data.Length); 
} 
response = (HttpWebResponse)chatreq.GetResponse(); 

或者,如果有簡單的方法發送一個原始的http請求,那就太好了。

謝謝。

+0

您是否嘗試過'WebClient.UploadValues'。這是發佈到URL(https://msdn.microsoft.com/en-us/library/900ted1f(v=vs.110).aspx)最簡單的方法之一。相關SO pos:https://stackoverflow.com/questions/4015324/http-request-with-post – Subbu

+0

如果您將內容類型設置爲「application/x-www-form-urlencoded」它怎麼可能是「文本/平原;字符集= UTF-8「? –

+0

@OndrejSvejdar就像我說過的那樣,這段代碼就是以前的樣子。我已經嘗試將其更改爲text/plain,並且仍然以application/json的形式出現。它可能會自動這樣做,因爲後數據是json(反正怪異的5 :::事情) – Poootaatoooo

回答

0

我先用Headers.Clear(),然後設置所有的標題,並正常通過。

儘管我最終使用了一個socket.io庫來完成這個項目,因爲它最終變得容易了很多。