千家信息网

如何使用apache的HttpClient进行http通讯

发表于:2024-10-16 作者:千家信息网编辑
千家信息网最后更新 2024年10月16日,这篇文章主要讲解了"如何使用apache的HttpClient进行http通讯",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用apache的Ht
千家信息网最后更新 2024年10月16日如何使用apache的HttpClient进行http通讯

这篇文章主要讲解了"如何使用apache的HttpClient进行http通讯",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用apache的HttpClient进行http通讯"吧!

我们用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/28/odata-service-parallele-performance-measurement-how-to-deal-with-xsrf-token-in-java-program-and-jmeter/

本文就来介绍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加到第二个请求的头部字段,谜底就这样解开了。

感谢各位的阅读,以上就是"如何使用apache的HttpClient进行http通讯"的内容了,经过本文的学习后,相信大家对如何使用apache的HttpClient进行http通讯这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

字段 通讯 头部 方法 服务器 程序 程序员 学习 服务 代码 内容 工具 情况 第一次 消费 观察 不用 云端 函数 动作 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器级别的电脑需要做什么 北京软件开发课程 广东警官学院网络安全专业 软件信息与网络技术学哪个更好 电脑有线宽带无法连接远程服务器 不同服务器之间实现单点登录 服务器设置域名远程连接 紫光芯云数据库 亨嘉网络技术有限公司招聘 蓬溪2020年外贸数据库系统 域名 绑定 服务器 软件工程金融软件开发方向 网络安全12月1日实施 第三堂网络安全教育课观后感 网络安全立法研究工作条件 西安交大网络安全苏洲 郑州电商软件开发需要多少钱 docker数据库连接不上 华为云数据库本地备份 杜庆灵信息网络安全监管 山东省服务器托管公司有哪些 怎么将图片存入mysql数据库 链接入口服务器失败怎么办 深圳服务器电源价钱 QQ勇者之翼明天开几个服务器 网络安全问题 索取比特币 福建erp软件开发 软件开发工具历年真题下载 软件开发工程师的交接工作 数据库目录表如何设计模板
0