C#提交一个POST表单并获取GET结果

C# submit a POST form and retrieve the GET result

我看过很多帖子都谈到了这个,但无法找到有效的解决方案...

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

为了准备这个,我使用 WireShark 嗅探 activity,果然我在 index.php 信息中找到了 POST 请求,然后是 [=32= 中的 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 代码。

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

谢谢

您需要根据请求创建一个新的 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"];