我需要为我正在创建的应用程序(用于在线聊天的自定义封装)发送一系列获取/发布请求。我通过松散地模拟从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