apache httpClient关于cookie解析的报错处理

报错信息:o.a.h.c.p.ResponseProcessCookies - Invalid cookie header: "Set-Cookie: account="xxxxx"; expires=Fri, 03 Feb 2023 06:02:40 GMT; httponly; Path=/". Invalid 'expires' attribute: Fri, 03 Feb 2023 06:02:40 GMT

httpClient版本:4.5.13

报错解析:

通过上面的报错信息,我们可以知道最后问题是出现在cookie的expires属性上,这个属性是代表着cookie存活时间,说的是这个字段属性无效。但在postman中,能正常的请求和保存cookie,那么问题肯定出现在解析代码中。

源码分析:

通过报错的类`ResponseProcessCookies`,直接打开源码找到打印报错日志的地方

从以上图片可以看出,发生错误的地方应该时在try里面,既然日志提示了是cookie构造失败,那么很明显应该就是cookieSpec.parse方法去构建cookie报错的

然而CookieSpec只是个接口,有多个实现,哪个出现的问题的,在不知道的情况下直接DEBUG查询,得知使用的是DefaultCookieSpec

一路DEBUG下去

到这里,区分是使用什么cookie属性处理器了,我们既然知道了expires属性有问题,直接进入BasicExpiresHandler

到这里很明显了,是关于cookie到期时间的格式有问题,请求中的格式`Fri, 03 Feb 2023 06:02:40 GMT` 即 EEE, dd MMM yy HH:mm:ss z,httpClient中解析的格式为`EEE, dd-MMM-yy HH:mm:ss z`,因请求中cookie到期时间的格式与解析的不符合导致的

找到的解决方案:

目前在网上看到两种

方案一:http://www.fullstackyang.com/httpclienthuo-qu-cookieji-chang-jian-cuo-wu-de-jie-jue-fang-fa/

方案二:https://blog.youkuaiyun.com/qq_32483145/article/details/88080453

方案一是自己手动写死处理到期时间的逻辑,个人觉得写法不太优雅

方案二则优雅一点修改解析格式(实际上方案二是写这篇博客时才看到的),但感觉拓展性不强

最终解决方案:

因为不是很喜欢上面两种方案,最终自己写了一个

直接自定义个MyDefaultCookieSpec去继承默认的DefaultCookieSpecProvider,所有实现全部使用父类的,就是在构造方法里加入自定义扩展的解析时间格式类型,这样有利于后续拓展

(自我感觉良好o.O)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值