我如何在 C# 中模拟此 post 请求
How do I simulate this post request in C#
我需要为我正在制作的应用程序(在线聊天的自定义包装器)发送一系列 get/post 请求。我通过松散地模拟从 Telerik Fiddler.
记录的请求,完成了站点登录过程和初始聊天加载
现在我遇到了另一个 post 请求的问题,该请求将用户注册为在线。
它是到 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"}]}
显然缺少了很多东西,但我认为大部分都不重要。我注意到原始请求的 header 已将 content-type 设置为 "text/plain," 即使我尝试了很多方法来更改接受和 content-type headers 来匹配,它总是作为 application/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 请求的简单方法,那就太好了。
谢谢。
我先用了Headers.Clear()
,然后设置了所有的headers,就正常通过了
不过我最终为这个项目使用了 socket.io 库,因为它最终变得容易多了。
我需要为我正在制作的应用程序(在线聊天的自定义包装器)发送一系列 get/post 请求。我通过松散地模拟从 Telerik Fiddler.
记录的请求,完成了站点登录过程和初始聊天加载现在我遇到了另一个 post 请求的问题,该请求将用户注册为在线。
它是到 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"}]}
显然缺少了很多东西,但我认为大部分都不重要。我注意到原始请求的 header 已将 content-type 设置为 "text/plain," 即使我尝试了很多方法来更改接受和 content-type headers 来匹配,它总是作为 application/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 请求的简单方法,那就太好了。
谢谢。
我先用了Headers.Clear()
,然后设置了所有的headers,就正常通过了
不过我最终为这个项目使用了 socket.io 库,因为它最终变得容易多了。