我需要为我正在制作的应用程序发送一系列get / post请求(用于在线聊天的自定义包装器)。我通过松散地模拟从 Telerik Fiddler 记录的请求完成了站点登录过程和初始聊天加载。
现在我遇到了一个不同的帖子请求,它将用户注册为在线。
这是与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"}]}
以下是它试图模拟它的方式(忽略不同的网址,它应该适用于此)
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”,即使我尝试了很多方法来更改accept和content-type标头以匹配,它总是作为application /发送json并得到404。image
我觉得我错过了一些非常明显和愚蠢的东西,但我在过去的几个小时里一直在排除故障,并且无法解决任何问题。
这是我用于请求的代码(我拿出了“text / plain”内容类型以及之前没有工作的其他东西,所以它有点干净)
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 :(得分:0)
我首先使用Headers.Clear()
,然后设置所有标头,它正常运行。
我最终为这个项目使用了socket.io库,因为它最终变得容易了。