C# HttpClient设置cookies的两种办法
前言:最近公司使用HttpClient对象在发送请求,抛弃了之前的HttpWebRequest,使用httpClient有个好处:就是可以只使用一个HttpClient的实例,去完成发送所有的请求数据(地址,请求数据,类型,Cookie等)。? ? 而传统的HttpWebRequest每次请求需要创建一个单独的实例,且规避了一个老问题:Socket? 连接释放不及时的问题。? ? 下面的是转发其他道友的文章,主要是在使用的过程中,自身需要发送一个自定义的Cookie到目标服务器,但是死活发送不过去,最后百度其他道友的文章发现如果需要发送自己的Cookie,需要做一个设置: var handler = new HttpClientHandler() { UseCookies = false}; var client = new HttpClient(handler);// { BaseAddress = baseAddress }; 道友文章地址:https://www.cnblogs.com/xiaozhu39505/p/8033108.html? ? ?原文如下: ? 一般有两种办法 第一种handler.UseCookies=true(默认为true),默认的会自己带上cookies,例如 var handler = new HttpClientHandler() { UseCookies = true }; var client = new HttpClient(handler);// { BaseAddress = baseAddress }; client.DefaultRequestHeaders.Add("user-agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0"); client.DefaultRequestHeaders.Add("Connection","Keep-Alive"); client.DefaultRequestHeaders.Add("Keep-Alive","timeout=600"); var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string,string>("email","xxxx"),new KeyValuePair<string,string>("password",}); var result = await client.PostAsync("https://www.xxxx.com/cp/login",content); result.EnsureSuccessStatusCode(); 这种情况post请求登陆成功后,重定向到别的页面,也会自动带上cookies。如果把handler.UseCookies设置为false,登陆后重定向的话不会自动带上cookies,则又会跳转到登陆页面。 ? 第二种设置 handler.UseCookies = false时,则需要手动给headers上加入cookies. var handler = new HttpClientHandler() { UseCookies = false}; var client = new HttpClient(handler);// { BaseAddress = baseAddress }; var message = new HttpRequestMessage(HttpMethod.Get,url); message.Headers.Add("Cookie","session_id=7258abbd1544b6c530a9f406d3e600239bd788fb"); var result = await client.SendAsync(message); result.EnsureSuccessStatusCode(); 如果使用场景是:抓取需要登陆后才能看到的网页数据,建议使用第一种,不需要设置任何cookies,httpclient会自动把登陆后的cookies放置到后面的请求中。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC 3 Beta 1 Block访问Razor视图
- asp.net-core – ASP.NET vNext – 本地化(.resx)
- asp.net-mvc-3 – 在if语句中的Asp.net MVC 3 Razor代码问题
- 在后面的asp.net代码中使用web服务的最佳方法
- asp.net – 在SAAS体系结构中,如何处理多租户的数据库模式和
- 初识ABP vNext(7):vue身份认证管理&租户管理
- asp.net – Telerik RadDatePicker在2030年之后没有收到日期
- asp-classic – 如何在asp经典中使用YYYY-MM-DD日期格式?
- asp.net-mvc – ASP.Net MVC“Magic Strings” – 可以避免
- asp.net-mvc-3 – Ninject – 无法找到资源