.NET 4.5 HttpClient 中使用Cookie


為了使用.NET 4.5的HttpClient從WIN2K3換成了WIN7。裝VS2010,結果告訴我VS2010不支持.NET 4.5。又裝VS2012,接着裝.NET FRAMEWORK 4.5.2。結果第一次打開VS2012創建項目。提示我錯誤。

無奈求助度娘,順利解決。打個補丁搞定。於是開始摸索HttpClient如何使用。網上的介紹還真是少的可憐。。居然沒找到一個使用COOKIE的列子。最后研究了半天終於找到地方了。

async void Navigate(string uri)
{
    Uri _uri = new Uri(uri);
var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip};

// expires=Thu, 這句有誤,不能出現逗號。去掉逗號也報錯。所以要吧expires整句去掉,一直到分號。
    //handler.CookieContainer.SetCookies(new Uri(uri), "BAIDUID=88F2FC4567899A8D5421A5398085F91:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com");
            
    //創建HttpClient(注意傳入HttpClientHandler)
using (var http = new HttpClient(handler))
    {
//await異步等待回應
        CookieCollection cookie;
        var response = await http.GetAsync(_uri);

        // 獲取服務器返回的Cookie(部分COOKIE無法記錄到HttpClientHandler的CookContainer中,可以手動加入。)
        string[] strCookies = (string[])response.Headers.GetValues("Set-Cookie");
        // 查看最新的Cookie內容
        cookie = handler.CookieContainer.GetCookies(_uri);
                
        //await異步讀取最后的數據(此時gzip已經被自動解壓縮了,因為上面的AutomaticDecompression = DecompressionMethods.GZip)
        textBox1.Text = await response.Content.ReadAsStringAsync();
    }
}

 因為Set-Cookie中有可能出現expires,這個Cookie屬性中會包含周幾的數據,后面跟了一個逗號。因為有這個逗號。HttpClientHandler無法自動將這一條Cookie的數據添加進去。這個就要自己處理了。

還有這個Cookie都可以在Headers里獲取到。但是設置的話無效。開始的時候是在HttpRequestMessage的Header中設置了。Cookie,可是抓包發現並沒有將設置的Cookie提交到服務器。

以上內容均以www.baidu.com作為目標網站測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM