我用httpwebrequest要模拟http的post请求登录后再访问登录后的某个页面,但是第一次模拟登录是返回了登录成功的内容的,再继续访问里面的某个页面,又提示需要登录了,没有能把session信息保存下来,第一次请求时的登录信息没有了,哪位大侠能帮忙解答下,我用的是winform application,谢谢
相关代码:
...
private CookieContainer cc = new CookieContainer();
...
private void simUrlLoginPost(UrlLogin urlLogin)
{
ASCIIEncoding encode = new ASCIIEncoding(); string postData = "e9601d3=" + urlLogin.ULUserInfo.UserName + "&e4958ba=" + urlLogin.ULUserInfo.Password;
byte[] paramData = encode.GetBytes(postData); HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(urlLogin.LoginUrl);
webReq.Method = "POST";
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.ContentLength = paramData.Length;
webReq.CookieContainer = this.cc;
webReq.KeepAlive = true; Stream stream = webReq.GetRequestStream();
stream.Write(paramData, 0, paramData.Length);
stream.Close(); HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse();
cookieHeader = webReq.CookieContainer.GetCookieHeader(webReq.RequestUri);
this.cc.Add(webResp.Cookies); StreamReader sr = new StreamReader(webResp.GetResponseStream());
string content = sr.ReadToEnd(); StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "test.html");
sw.Write(content); // 到这里是成功登录了,返回了登录后的页面信息 // 再次请求登录后的某个页面
webReq = (HttpWebRequest)HttpWebRequest.Create(urlLogin.ArmyUrl);
webReq.CookieContainer = this.cc;
webReq.Referer = urlLogin.LoginUrl;
webResp = (HttpWebResponse)webReq.GetResponse();
this.cc.Add(webResp.Cookies);
sr = new StreamReader(webResp.GetResponseStream());
content = sr.ReadToEnd(); sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "test_army.html");
sw.Write(content); // 返回的是需要重新登录的信息,为什么前面的登录信息没有了呢? 请帮偶看下,谢谢 sr.Close();
sw.Close();
}
相关代码:
...
private CookieContainer cc = new CookieContainer();
...
private void simUrlLoginPost(UrlLogin urlLogin)
{
ASCIIEncoding encode = new ASCIIEncoding(); string postData = "e9601d3=" + urlLogin.ULUserInfo.UserName + "&e4958ba=" + urlLogin.ULUserInfo.Password;
byte[] paramData = encode.GetBytes(postData); HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(urlLogin.LoginUrl);
webReq.Method = "POST";
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.ContentLength = paramData.Length;
webReq.CookieContainer = this.cc;
webReq.KeepAlive = true; Stream stream = webReq.GetRequestStream();
stream.Write(paramData, 0, paramData.Length);
stream.Close(); HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse();
cookieHeader = webReq.CookieContainer.GetCookieHeader(webReq.RequestUri);
this.cc.Add(webResp.Cookies); StreamReader sr = new StreamReader(webResp.GetResponseStream());
string content = sr.ReadToEnd(); StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "test.html");
sw.Write(content); // 到这里是成功登录了,返回了登录后的页面信息 // 再次请求登录后的某个页面
webReq = (HttpWebRequest)HttpWebRequest.Create(urlLogin.ArmyUrl);
webReq.CookieContainer = this.cc;
webReq.Referer = urlLogin.LoginUrl;
webResp = (HttpWebResponse)webReq.GetResponse();
this.cc.Add(webResp.Cookies);
sr = new StreamReader(webResp.GetResponseStream());
content = sr.ReadToEnd(); sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "test_army.html");
sw.Write(content); // 返回的是需要重新登录的信息,为什么前面的登录信息没有了呢? 请帮偶看下,谢谢 sr.Close();
sw.Close();
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货