httpWebRequest保持session的方法
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();
相關文章
- HttpWebRequest 保持sessionHTTPWebSession
- 用C#使用HttpWebRequest Post資料時如何保持SessionHTTPWebSession
- C#:使用HttpWebRequest後保持Session,再使用一個HttpWebRequest實現瀏覽、下載等效果C#HTTPWebSession
- HttpWebRequest.GetResponse 方法HTTPWeb
- 關於requests的session方法無法保持cookie的問題。SessionCookie
- wap怎樣做到保持session?Session
- 爬蟲如何利用session方法保持登陸狀態(selenium)爬蟲Session
- HttpWebRequest和WebClient的用法HTTPWebclient
- python爬蟲如何用session保持登入?Python爬蟲Session
- 保持高效學習的 7 個方法
- PHP中如何保持SESSION以及由此引發的一些思考PHPSession
- memcache同步session的方法Session
- 如何保持一個伺服器上session不過期伺服器Session
- HttpRequest 和HttpWebRequest的區別(轉)HTTPWeb
- flask中的session物件方法FlaskSession物件
- 十二、.net core(.NET 6)新增通用的訪問webapi的方法(包括HttpClient和HttpWebRequest)WebAPIHTTPclient
- httpWebRequest 檔案下載HTTPWeb
- HttpWebRequest的timeout和ReadWriteTimeoutHTTPWeb
- python+pytest介面自動化(10)-session會話保持PythonSession會話
- Windows Phone網路HttpWebRequest用法WindowsHTTPWeb
- Android 保持螢幕常亮的幾種方法Android
- C#通過webRequest保持在同一Session中Post資料C#WebSession
- Rails session物件的 as_json方法AISession物件JSON
- 修改Oracle process 和 session 的方法--摘OracleSession
- 一個Session Bean如何去呼叫另外一個Session Bean裡的方法?SessionBean
- 爬蟲 | 處理cookie的基本方法——session爬蟲CookieSession
- node的Connect使用session、cookie的使用方法SessionCookie
- Many To Many could not initialize proxy – no Session的解決方法Session
- 使用資料庫儲存session的方法 (轉)資料庫Session
- [譯]讓員工保持積極性的六大方法
- Hibernate的Session的get()和load()方法區別Session
- MySQL入門--設定session,global變數的方法MySqlSession變數
- Oracle中診斷阻塞session的方法 blocking errorOracleSessionBloCError
- Struts2中使用Session的兩種方法Session
- Hibernate中session.getconnection()的替代方法Session
- HttpWebRequest請求http1.1的chunked的解析問題記錄HTTPWeb
- php中Session使用方法詳解PHPSession
- session bean中的session如何理解?SessionBean