我需要爲我正在創建的應用程序(用於在線聊天的自定義封裝)發送一系列獲取/發佈請求。我通過鬆散地模擬從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請求,那就太好了。
謝謝。
您是否嘗試過'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
如果您將內容類型設置爲「application/x-www-form-urlencoded」它怎麼可能是「文本/平原;字符集= UTF-8「? –
@OndrejSvejdar就像我說過的那樣,這段代碼就是以前的樣子。我已經嘗試將其更改爲text/plain,並且仍然以application/json的形式出現。它可能會自動這樣做,因爲後數據是json(反正怪異的5 :::事情) – Poootaatoooo