码迷,mamicode.com
首页 > Web开发 > 详细

.NET 4.5 HttpClient 中使用Cookie

时间:2014-05-28 16:11:43      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   blog   code   java   

为了使用.NET 4.5的HttpClient从WIN2K3换成了WIN7。装VS2010,结果告诉我VS2010不支持.NET 4.5。又装VS2012,接着装.NET FRAMEWORK 4.5.2。结果第一次打开VS2012创建项目。提示我错误。

无奈求助度娘,顺利解决。打个补丁搞定。于是开始摸索HttpClient如何使用。网上的介绍还真是少的可怜。。居然没找到一个使用COOKIE的列子。最后研究了半天终于找到地方了。

bubuko.com,布布扣
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();
    }
}
bubuko.com,布布扣

 因为Set-Cookie中有可能出现expires,这个Cookie属性中会包含周几的数据,后面跟了一个逗号。因为有这个逗号。HttpClientHandler无法自动将这一条Cookie的数据添加进去。这个就要自己处理了。

还有这个Cookie都可以在Headers里获取到。但是设置的话无效。开始的时候是在HttpRequestMessage的Header中设置了。Cookie,可是抓包发现并没有将设置的Cookie提交到服务器。

以上内容均以www.baidu.com作为目标网站测试。

.NET 4.5 HttpClient 中使用Cookie,布布扣,bubuko.com

.NET 4.5 HttpClient 中使用Cookie

标签:style   c   class   blog   code   java   

原文地址:http://www.cnblogs.com/leeairw/p/3754913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!