今天在给我姐夫写一个 QQ 自动加好友的程序,但是在 HttpClient 登陆 QQ 的时候报了一个错:

-- ::33.727 [Thread-] - Invalid cookie header: "Set-Cookie: pt2gguin=;Expires=Thu, 01 Jan 1970 00:00:00 GMT;Path=/;Domain=qq.com;". Invalid 'expires' attribute: Thu,  Jan  :: GMT
-- ::33.738 [Thread-] - Invalid cookie header: "Set-Cookie: pt2gguin=o3413198711;Expires=Tue, 19 Jan 2038 03:14:07 GMT;Path=/;Domain=ptlogin2.qq.com;". Invalid 'expires' attribute: Tue, Jan :: GMT
-- ::33.751 [Thread-] - Invalid cookie header: "Set-Cookie: pt_recent_uins=813d3b6002b7444a612a73b16d2bfc8d63cf29eee15b914f23387c79f948909fa0d856264f22e6d89bc1722e84d35c466e84178100c282cb;Expires=Thu, 14 Mar 2019 06:08:34 GMT;Path=/;Domain=ptlogin2.qq.com;HttpOnly;". Invalid 'expires' attribute: Thu, Mar :: GMT
-- ::33.760 [Thread-] - Invalid cookie header: "Set-Cookie: RK=jyxghgEN/Q;Expires=Tue, 19 Jan 2038 03:14:07 GMT;Path=/;Domain=qq.com;". Invalid 'expires' attribute: Tue, Jan :: GMT
-- ::33.772 [Thread-] - Invalid cookie header: "Set-Cookie: ptcz=c22602e5a8b3b23af9924e4fe230dca938964da3a2536767863084df7c79ffdd;Expires=Tue, 19 Jan 2038 03:14:07 GMT;Path=/;Domain=qq.com;". Invalid 'expires' attribute: Tue, Jan :: GMT
-- ::33.783 [Thread-] - Invalid cookie header: "Set-Cookie: ptcz=;Expires=Thu, 01 Jan 1970 00:00:00 GMT;Path=/;Domain=ptlogin2.qq.com;". Invalid 'expires' attribute: Thu, Jan :: GMT
-- ::33.793 [Thread-] - Invalid cookie header: "Set-Cookie: airkey=;Expires=Thu, 01 Jan 1970 00:00:00 GMT;Path=/;Domain=qq.com;". Invalid 'expires' attribute: Thu, Jan :: GMT

这里提示设置的 Cookie expires 无效,我看了下值都是长这样的 Thu, 01 Jan 1970 00:00:00 GMT。查了下资料发现说是因为 HttpClient4 默认的 cookie 策略是不支持这种格式。

既然查出原因就好办了

1、第一种办法就是把服务器设置的 cookie 值改掉

2、修改默认的 cookie 策略,改为 STANDARD_STRICT 或者 STANDARD

我这里因为是腾讯的服务器我改不了所有我选择了第二种:

我这里也不是直接用的 HttpClient4,用的是 net.dongliu.requests 封装好的,我也没找到他有提供修改的 cookie 策略的地方。我比较粗暴,直接把他封装的ClientBuilder 类修改成 CookieSpecs.STANDARD_STRIC 直接类覆盖了。

 RequestConfig.Builder configBuilder = RequestConfig.custom()
.setConnectTimeout(connectTimeout)
.setSocketTimeout(socketTimeout)
// we use connect timeout for connection request timeout
.setConnectionRequestTimeout(connectTimeout)
.setCookieSpec(CookieSpecs.STANDARD);

或者直接

HttpClient httpClient = HttpClients.custom()
.setDefaultRequestConfig(RequestConfig.custom()
.setCookieSpec(CookieSpecs.STANDARD).build())
.build();

也有说可以用 BROWSER_COMPATIBILITY 或者 NETSCAPE  策略的,但是我试了没有成功。

相关资料链接:

https://stackoverflow.com/questions/36473478/fixing-httpclient-warning-invalid-expires-attribute-using-fluent-api

https://issues.apache.org/jira/browse/HTTPCLIENT-1077

HttpClient 报错 Invalid cookie header, Invalid 'expires' attribute: Thu, 01 Jan 1970 00:00:00 GMT的更多相关文章

  1. HttpClient4 警告: Invalid cookie header 的问题解决(转)

    原文地址:HttpClient4 警告: Invalid cookie header 的问题解决 最近使用HttpClient4的时候出现如下警告信息 org.apache.http.client.p ...

  2. webMagic解析淘宝cookie 提示Invalid cookie header

    webMagic解析淘宝cookie 提示Invalid cookie header 在使用webMagic框架做爬虫爬取淘宝极又家页面时候一直提醒cookie设置不可用如下图 淘宝的验证特别严重,c ...

  3. 使用xadmin搜索search_fields报错:Related Field got invalid lookup: icontains

    一.问题描述 使用xadmin实现Django后台功能时,使用search_fields = [字段名,字段名],在搜索的时候报错Related Field got invalid lookup: i ...

  4. Vue报错之"[Vue warn]: Invalid prop: type check failed for prop "jingzinum". Expected Number with value NaN, got String with value "fuNum"."

    一.报错截图 [Vue warn]: Invalid prop: type check failed for prop "jingzinum". Expected Number w ...

  5. EL表达式报错:  According to TLD or attribute directive in tag file, attribute value does not accept any expressions

    EL表达式报错: According to TLD or attribute directive in tag file, attribute value does not accept any ex ...

  6. pymysql下报错:numpy.float64 object has no attribute 'translate' 可能是pandas版本的问题

    pymysql下报错:numpy.float64 object has no attribute 'translate'.定位到db.merge函数中,dataframe中浮点型元素的类型为numpy ...

  7. 使用jstl报错:According to TLD or attribute directive in tag file, attribute value does not accept any expressions

    使用jstl报错:According to TLD or attribute directive in tag file, attribute value does not accept any ex ...

  8. 使用jstl标签报错:According to TLD or attribute directive in tag file, attribute value

    原来jstl标签版本不一样,标签支持不一样. jstl1.0标签库不支持表达式,如: <c:if test="${query01 == null}">   <js ...

  9. pycharm安装 package报错:module 'pip' has no attribute 'main'

    转自: <pycharm安装 package报错:module 'pip' has no attribute 'main'> https://www.cnblogs.com/Fordest ...

随机推荐

  1. Java笔记(day12)

    包: 对类文件进行分类管理:给类提供多层命名(名称)空间:写在程序文件的第一行:类名的全称是 包名.类名包也是一种封装形式: package protected必须是成为其子类,才能继承import导 ...

  2. 结合Mybatis源码看设计模式——外观模式

    定义 提供了一个统一的接口,用来访问子系统中一群接口 适用场景 子系统复杂,增加外观模式提供简单调用接口 构建多层系统结构,用外观对象作为每层入口 详解 外观模式,主要理解外观.通俗一点可以认为这个模 ...

  3. jqgrid three 树形结构

    最近我们的表格中,需要更改数据的显示方式,就是jqgrid中以树形的方式显示.请先看图: 就是简单的这种从属方式.但是因为这个没有找到官方的文档(后来找到了,但是发现是翻译过来的,也不是很清楚),所以 ...

  4. SqlServer中用SQL语句附加数据库及修改数据库逻辑文件名

    --查询数据库逻辑文件名 USE 数据库名 SELECT FILE_NAME(1) --查询数据库逻辑文件名(日志) USE 数据库名 SELECT FILE_NAME(2) --附加数据库 sp_a ...

  5. C# Npoi 实现Excel与数据库相互导入

    十年河东,十年河西,莫欺少年穷! NPOI支持对 Word 和 Excel 文件的操作! 针对 Word 的操作一般用于打印技术!说白了就是利用 Word 文件作为模板,生成各种不同的打印!具体用到的 ...

  6. 爬虫须知的HTTP协议

    HTTP请求: 1.HTTP请求主要分为"Get"和"Post"两种方法. 2.当我们在浏览器输入URL http://www.baidu.com 的时候, 浏 ...

  7. 试试自行封装AJAX和jQuery中的ajax封装的基本使用

    封装的套路: 1.写一个相对比较完善的用例2.写一个空函数,没有形参,将刚刚的用例直接作为函数的函数体3.根据使用过程中的需求抽象函数 代码记录如下: <script> function ...

  8. ubuntu 16.04安装perf

    ljc@ubuntu:~$ perf 程序“perf”尚未安装. 您可以使用以下命令安装: sudo apt install linux-tools-common ljc@ubuntu:~$ sudo ...

  9. 网络协议 19 - RPC协议综述:远在天边近在眼前

    [前五篇]系列文章传送门: 网络协议 14 - 流媒体协议:要说爱你不容易 网络协议 15 - P2P 协议:小种子大学问 网络协议 16 - DNS 协议:网络世界的地址簿 网络协议 17 - HT ...

  10. docker~docker-compose的使用

    回到目录 docker-compose是用来在Docker中定义和运行复杂应用的工具,比如在一个yum文件里定义多个容器,只用一行命令就可以让一切就绪并运行. 使用docker compose我们可以 ...