C#提交POST表单并检索GET结果

本文关键字:检索 GET 结果 表单 提交 POST | 更新日期: 2024-10-20 23:04:14

我看到过几篇关于这方面的帖子,但无法找到一个有效的解决方案。。。

因此,基本上我想通过提交POST html表单来登录网站,然后(我想使用会话cookie)在登录后检索GET结果内容。

为了准备这一点,我使用WireShark来探查活动,我在index.php信息中找到了POST请求,然后在user.php 中找到了GET请求

所以在C#中复制这个:

var request = (HttpWebRequest) WebRequest.Create("xxx/index.php");
var postData = "login_name=xxx";
postData += "&login_pw=xxx";
postData += "&login_submit=Connexion";
postData += "&login_server=1";
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse) request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

第一个问题是,在WireShqrk中,当我收到get请求时,我看到了一个cookie,但在C#中,响应中的cookie列表是空的

我仍然试图获得结果的内容:

request = (HttpWebRequest)WebRequest.Create("xxx/user.php");
response = (HttpWebResponse)request.GetResponse();
responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

但是这个响应基本上是原始登录页面的html代码。

好了,任何建议都将不胜感激

感谢

C#提交POST表单并检索GET结果

您需要在请求上创建一个新的CookieContainer,并在后续请求上共享该容器。

var cookieContainer = new CookieContainer();
var request = (HttpWebRequest) WebRequest.Create("xxx/index.php");
request.CookieContainer = cookieContainer;
//do the post...
var getRequest = (HttpWebRequest) WebRequest.Create("xxx/index.php");
getRequest.CookieContainer = cookieContainer;
//do the get...

解决方案是不允许自动重定向并从获取cookie信息

        cookieHeader = resp.Headers["Set-Cookie"];