我用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();
        }

解决方案 »

  1.   

    想了好几天了,资料也找了很多,都是说设置了CookieContainer就可以了,但是实际试验下来, 第二次提交的时候,登录信息就丢失了,~~ 郁闷
      

  2.   

    你设一个断点来检查一下第一次登陆成功后返回的cookie内容..我曾经遇到过一个类似的问题...后来发现是第一次登陆成功后返回的cookie里面保存的path有问题..需要手动调整一下然后重新设一下cc
      

  3.   

    谢谢4楼的兄弟,问题正如你说的那样, cookie中的path有问题, 哈哈,终于搞定了, 哦也~~