httpRequest.CookieContainer= cookie 與 httpRequest.Headers.Add("Cookie", cookie)

這兩天作了一個獲取cookie而且攜帶此cookie去請求另一個url地址,中間攜帶cookie用了兩種方式:
1. httpRequest.CookieContainer= cookie (此cookie爲一個cookie容器對象)
2.httpRequest.Headers.Add("Cookie", cookie) (此cookie爲一個cookie字符串)

測試結果:1種方式cookie失效而且丟失。2種方式攜帶成功而且能夠成功顯示已登陸。

緣由待查,記錄下。
說明:也可能cookie容器設置的方式有問題。

附上代碼:


public
class Login { public string GetCookie(string postString, string postUrl) { CookieContainer cookie = new CookieContainer(); HttpWebRequest httpRequset = (HttpWebRequest)HttpWebRequest.Create(postUrl);//建立http 請求 httpRequset.CookieContainer = cookie;//設置cookie httpRequset.Method = "POST";//POST 提交 httpRequset.KeepAlive = true; httpRequset.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36"; httpRequset.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; httpRequset.ContentType = "application/x-www-form-urlencoded";//以上信息在監聽請求的時候都有的直接複製過來 httpRequset.Referer = "http://my.qianlima.com/login.jsp"; byte[] bytes = System.Text.Encoding.UTF8.GetBytes(postString); httpRequset.ContentLength = bytes.Length; Stream stream = httpRequset.GetRequestStream(); stream.Write(bytes, 0, bytes.Length); stream.Close();//以上是POST數據的寫入 HttpWebResponse httpResponse = (HttpWebResponse)httpRequset.GetResponse();//得到 服務端響應 var str = cookie.GetCookieHeader(httpRequset.RequestUri); return str;//拿到cookie } public string GetContent(string cookie, string url) { string content; HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(url); httpRequest.Headers.Add("Cookie", cookie); httpRequest.Referer = url; httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36"; httpRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; httpRequest.ContentType = "application/x-www-form-urlencoded"; httpRequest.Method = "GET"; HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); using (Stream responsestream = httpResponse.GetResponseStream()) { using (StreamReader sr = new StreamReader(responsestream, System.Text.Encoding.Default)) { content = sr.ReadToEnd(); } } return content; } }

 

此文章由機器翻譯。 將光標移到文章的句子上,以查看原文。  更多信息。
譯文
原文

CookieContainer 類

.NET Framework 4.6 and 4.5
 
其餘版本
 
 

爲 CookieCollection 對象的集合提供容器。html

命名空間:    System.Net
程序集:  System(System.dll 中)

System::Object
System.Net::CookieContainer

語法
 
 
[SerializableAttribute]
public ref class CookieContainer 
構造函數
 
  名稱 說明
System_CAPS_pubmethod CookieContainer()

初始化 CookieContainer 類的新實例。web

System_CAPS_pubmethod CookieContainer(Int32)

使用指定的表示容器能夠包含的 Cookie 實例數的值初始化 CookieContainer 類的新實例。數據庫

System_CAPS_pubmethod CookieContainer(Int32, Int32, Int32)

使用指定屬性初始化 CookieContainer 類的新實例。cookie

屬性
 
  名稱 說明
System_CAPS_pubproperty Capacity

獲取和設置 CookieContainer 能夠包含的 Cookie 實例數。數據結構

System_CAPS_pubproperty Count

獲取 CookieContainer 當前包含的 Cookie 實例數。app

System_CAPS_pubproperty MaxCookieSize

表示 Cookie 的最大容許長度。dom

System_CAPS_pubproperty PerDomainCapacity

獲取和設置 CookieContainer 能夠在每一個域包含的 Cookie 實例數。jsp

方法
 
  名稱 說明
System_CAPS_pubmethod Add(Cookie^)

將 Cookie 添加到 CookieContainer此方法使用 Cookie 中的域來肯定將 Cookie 與哪一個域集合相關聯。ide

System_CAPS_pubmethod Add(CookieCollection^)

將 CookieCollection 的內容添加到 CookieContainer 中。函數

System_CAPS_pubmethod Add(Uri^, Cookie^)

將 Cookie 添加到特定 URI 的 CookieContainer 中。

System_CAPS_pubmethod Add(Uri^, CookieCollection^)

將 CookieCollection 的內容添加到特定 URI 的 CookieContainer 中。

System_CAPS_pubmethod Equals(Object^)

肯定指定的對象是否等於當前對象。(從 Object 繼承。)

System_CAPS_protmethod Finalize()

在垃圾回收將某一對象回收前容許該對象嘗試釋放資源並執行其餘清理操做。(從 Object 繼承。)

System_CAPS_pubmethod GetCookieHeader(Uri^)

獲取 HTTP Cookie 標頭,該標頭包含表示與特定 URI 關聯的 Cookie 實例的 HTTP Cookie。

System_CAPS_pubmethod GetCookies(Uri^)

獲取包含與特定 URI 關聯的 Cookie 實例的 CookieCollection

System_CAPS_pubmethod GetHashCode()

做爲默認哈希函數。(從 Object 繼承。)

System_CAPS_pubmethod GetType()

獲取當前實例的 Type(從 Object 繼承。)

System_CAPS_protmethod MemberwiseClone()

建立當前 Object 的淺表副本。(從 Object 繼承。)

System_CAPS_pubmethod SetCookies(Uri^, String^)

將 HTTP Cookie 標頭中的一個或多個 Cookie 的 Cookie 實例添加到特定 URI 的 CookieContainer 中。

System_CAPS_pubmethod ToString()

返回表示當前對象的字符串。(從 Object 繼承。)

字段
 
  名稱 說明
System_CAPS_pubfieldSystem_CAPS_static DefaultCookieLengthLimit

表示 CookieContainer 能夠包含的 Cookie 實例的默認最大大小(以字節爲單位)。此字段爲常數。

System_CAPS_pubfieldSystem_CAPS_static DefaultCookieLimit

表示 CookieContainer 能夠包含的 Cookie 實例的默認最大數目。此字段爲常數。

System_CAPS_pubfieldSystem_CAPS_static DefaultPerDomainCookieLimit

表示 CookieContainer 能夠在每一個域引用的 Cookie 實例的默認最大數目。此字段爲常數。

備註
 

CookieContainer 是爲 Cookie 類的實例提供存儲空間的數據結構,該結構以相似於數據庫的方式來進行訪問。 CookieContainer 具備容量限制,此限制在建立容器或經過屬性更改容器時設置。

Cookie 類的實例被添加到基於其起始 URI 的容器。它會被添加到與該 URI 關聯的內部 CookieCollection Cookie 做爲 CookieCollection 或做爲可用於提交 HTTP WebRequest 的字符串,從基於該 URI 的容器中進行檢索。

CookieContainer 有三項屬性用於管理容器的內容容量:CapacityMaxCookieSize 和 PerDomainCapacity這些值的默認設置分別爲 300、4096 和 20。當一個 Cookie 被添加到容器中時,這些屬性將用於肯定是否應丟棄已包含在 CookieContainer 中的 Cookie,以便給新的 Cookie 讓出空間。 CookieContainer 對每一次添加進行跟蹤,以確保不會超過 Capacity 限制或 PerDomainCapacity 限制。若是超過這兩項限制或其中一項限制,則將移除 CookieContainer 所包含的 Cookie 實例。首先,全部過時的 Cookie 都將被移除。若是必須進一步收回容量,則清除最先使用的CookieCollection

相關文章
相關標籤/搜索