我已经看到几个帖子谈到这个,但无法设法获得有效的解决方案......
所以基本上我想通过提交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代码。
你去,任何建议将不胜感激
感谢
答案 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"];