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

时间:2015-03-06 22:28:29

标签: c# html post get request

我已经看到几个帖子谈到这个,但无法设法获得有效的解决方案......

所以基本上我想通过提交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代码。

你去,任何建议将不胜感激

感谢

2 个答案:

答案 0 :(得分:0)

您需要在请求中创建新的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...

答案 1 :(得分:0)

解决方案是不允许自动重定向并从

获取cookie信息
        cookieHeader = resp.Headers["Set-Cookie"];