【发布时间】:2017-06-26 02:28:18
【问题描述】:
我需要为我正在制作的应用程序(在线聊天的自定义包装器)发送一系列获取/发布请求。通过松散地模拟从 Telerik Fiddler 记录的请求,我完成了站点登录过程和初始聊天加载。
现在我遇到了另一个发布请求的问题,该请求将用户注册为在线。
这是一个到 socket.io 服务器的连接,但我知道没有套接字连接是可能的,因为当我使用 Fiddler 的“composer”功能发送请求时一切正常。
这是我要模拟的请求
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”,即使我尝试了多种方法来更改接受和内容类型标头以匹配,它始终作为 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 请求,那就太好了。
谢谢。
【问题讨论】:
-
您是否尝试过`WebClient.UploadValues'。这是发布到 URL (msdn.microsoft.com/en-us/library/900ted1f(v=vs.110).aspx) 的最简单方法之一。相关SO pos:stackoverflow.com/questions/4015324/http-request-with-post
-
如果您将内容类型设置为“application/x-www-form-urlencoded”,怎么可能是“text/plain;charset=UTF-8”?
-
@OndrejSvejdar 就像我说的,sn-p 是以前的样子。我已经尝试将其更改为 text/plain,它仍然以 application/json 的形式运行。它可能是自动执行的,因为发布数据是 json (无论如何都取消了奇怪的 5::: 东西)
-
@Subbu 我已经尝试过另一种发送方式,我不记得是不是这样,但我会试一试。
标签: c# .net post httpwebrequest webrequest