2017-06-26 163 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库来完成这个项目,因为它最终变得容易了很多。