前言:最近公司使用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", "xxxx"),
});
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放置到后面的请求中。

最新文章

  1. docker通过iptables修改或新增镜像映射端口
  2. &lt;base&gt;元素
  3. [xsd学习]xsd元素限定
  4. jQ HTML之捕获 设置 元素添加与删除
  5. Multipart to single part feature
  6. HTTP 错误 403.14 - Forbidden
  7. JS实现标签页效果(配合css)不同标签下对应不同div
  8. 深入了解Android蓝牙Bluetooth——《进阶篇》
  9. 怎么让普通用户使用root权限执行用户命令
  10. Python基础学习篇章二
  11. CommonsChunkPlugin相关
  12. flutter-fluro
  13. 解决kali linux 升级后安装w3af 问题
  14. C# 文件/文件夹压缩解压缩
  15. POJ 2184 Cow Exhibition (带负值的01背包)
  16. 【转】苹果App Store审核指南中文翻译(更新)
  17. PAT甲题题解-1064. Complete Binary Search Tree (30)-中序和层次遍历,水
  18. JSTL-taglib
  19. C/C++ -- Gui编程 -- Qt库的使用 -- Qt5总结
  20. centos/rhel最小化安装图形化

热门文章

  1. CCF-CSP题解 201512-3 画图
  2. mysql统计天、周、月、季度、半年、年
  3. Java使用iBatis批量插入数据到Oracle数据库
  4. python 类属性与实例属性
  5. 知识图谱推理与实践(3) -- jena自定义builtin
  6. 微信小程序 存储数据到本地以及本地获取数据
  7. Golang 入门系列(十二)ORM框架gorm
  8. 6.1 自定义abp拦截器示例
  9. MySQL 有关MHA搭建与切换的几个错误log
  10. 搭建私人的云笔记_使用webdav服务