内容简介:我们用apache的HttpClient这个库消费云端的Restful API时,一般都需要两次HTTP调用,第一次获得某种token,比如获取防止跨域请求伪造攻击Cross-site request forgery - CSRF的token,或者比如微信API的access token,第二次再进行真正的API消费。本文就来介绍apache的HttpClient,在发送第二个Http请求时,是如何自动插入从第一个请求获得的服务器颁发的cookie的。首先进入HttpClient的单步调试:Internal
我们用apache的HttpClient这个库消费云端的Restful API时,一般都需要两次HTTP调用,第一次获得某种token,比如获取防止跨域请求伪造攻击Cross-site request forgery - CSRF的token,或者比如微信API的access token,第二次再进行真正的API消费。
通常情况下,第一次请求完毕后,服务器都会给客户端返回一些cookie字段,在第二次请求时,如果使用的是postman测试 工具 或者apache的HttpClient这个库,cookie字段都会自动被附加在第二次请求的HTTP头部。详情可以参考我写的另一篇博客:OData service parallel performance measurement – how to deal with XSRF token in Java Program and JMeter
https://blogs.sap.com/2017/08...本文就来介绍apache的HttpClient,在发送第二个Http请求时,是如何自动插入从第一个请求获得的服务器颁发的cookie的。
首先进入HttpClient的单步调试:InternalHttpClient.doExecute方法:
第85行的origheaders,即取出 程序员 在代码里指定的http请求头部字段,比如basic Authentication,content-type,token等等:
这个cookie是什么时候传进来的?
看来我们必须进入httpcore-4.4.3.jar这个apache HttpClient的实现里去调试。
经过观察发现,一旦我执行完204行的conn.sendRequestHeader方法,就能观察到Cookie被自动设置了,所以奥妙就在第204行里。
自动添加Content-Length头部字段:
由此可见Content-length是通过方法entity.getContentLength()自动计算出来的,因此我们程序员不必在自己的应用代码里重复这个计算动作。
自动加入host字段:
自动加入Connection: Keep-Alive
UserAgent的自动填充:Apache-HttpClient/4.5.1, 这个也不用程序员操心。
终于到了我要找的RequestAddCookies这个HTTPRequestInterceptor了。光从这个类的字面意思就能猜到它和HTTP请求的Cookie有关。
新建一个Cookie,这个CookieOrigin构造函数里的hpst,path和secure标志位都是Chrome开发者工具的Cookie标签页里能看到。
从 Cookie Store里取出前一次请求中由服务器返回的Cookie:
这里把Cookie store里的cookie加到第二个请求的头部字段,谜底就这样解开了。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
以上所述就是小编给大家介绍的《使用apache的HttpClient进行http通讯,隐藏的HTTP请求头部字段是如何自动被添加的》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Vue实战-头部模块编写(5)
- 将 Swift 序列切分为头部和尾部
- 移动端页面头部固定定位的绝对定位实现
- IPV4与IPV6的头部PK
- Vue-SSR: head Mixin 实现头部信息管理
- 程序员难逃二八法则,如何晋升为头部 20% 玩家?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Big Java Late Objects
Horstmann, Cay S. / 2012-2 / 896.00元
The introductory programming course is difficult. Many students fail to succeed or have trouble in the course because they don't understand the material and do not practice programming sufficiently. ......一起来看看 《Big Java Late Objects》 这本书的介绍吧!