httpWebRequest保持session的方法

大米_小米發表於2014-09-10


      httpWebRequest每次請求,服務端是不同的Session, 對於需要登入保持Session才能操作的頁面,無法進行。這就要求程式每次請求在同一個Session中。

網上有許多保持Session的說明,都不夠直接。這裡特別說明一下。

      服務端每次識別客戶端在同一個Session訪問,是基於cookie中有SessionID值。每次訪問服務端時, 服務端通過識別客戶請求的cookie的SessionID值,來判斷是否在同一個Session中。

     解決方法就是在登入成功後,獲取請求的cookie, 在下次請求時,將cookie賦值給HttpWebRequest.CookieContainer,就可以成功訪問了。

          

            //建立cookie 

            CookieContainer cookies = new CookieContainer();
            HttpWebRequest webRequest;

            //登入LOGIN_URL

            webRequest = (HttpWebRequest)WebRequest.Create(LOGIN_URL);
            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";


           // 賦值給webRequest.CookieContainer 


            webRequest.CookieContainer = cookies;

            StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream());
            string postData = "username="+tUsername.Text.Trim()+"&password="+tPassword.Text.Trim();
            requestWriter.Write(postData);
            requestWriter.Close();

            StreamReader responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
            string responseData = responseReader.ReadToEnd();
            responseReader.Close();
            webRequest.GetResponse().Close();

            //獲取登入成功後的cookie

            CookieCollection cookieheader = webRequest.CookieContainer.GetCookies(new Uri(LOGIN_URL));
            cookies.Add(cookieheader)
;

            //訪問其它頁面PAGE_URL

            webRequest = (HttpWebRequest)WebRequest.Create(PAGE_URL);

           // 核心關鍵:賦值給webRequest.CookieContainer,這時就可以成功訪問
            webRequest.CookieContainer = cookies;
            webRequest.ContentType = "application/x-www-form-urlencoded";
            StreamReader responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream(), Encoding.GetEncoding("utf-8"));
            string responseData = responseReader.ReadToEnd();
            responseReader.Close();

請參看:http://download.csdn.net/detail/c6088/7888301

相關文章