我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用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方法:

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

第85行的origheaders,即取出程序员在代码里指定的http请求头部字段,比如basic Authentication,content-type,token等等:

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

这个cookie是什么时候传进来的?

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

看来我们必须进入httpcore-4.4.3.jar这个apache HttpClient的实现里去调试。

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

经过观察发现,一旦我执行完204行的conn.sendRequestHeader方法,就能观察到Cookie被自动设置了,所以奥妙就在第204行里。

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

自动添加Content-Length头部字段:

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

由此可见Content-length是通过方法entity.getContentLength()自动计算出来的,因此我们程序员不必在自己的应用代码里重复这个计算动作。

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

自动加入host字段:

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

自动加入Connection: Keep-Alive

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

UserAgent的自动填充:Apache-HttpClient/4.5.1, 这个也不用程序员操心。

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

终于到了我要找的RequestAddCookies这个HTTPRequestInterceptor了。光从这个类的字面意思就能猜到它和HTTP请求的Cookie有关。

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

新建一个Cookie,这个CookieOrigin构造函数里的hpst,path和secure标志位都是Chrome开发者工具的Cookie标签页里能看到。

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

从 Cookie Store里取出前一次请求中由服务器返回的Cookie:

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

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

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

这里把Cookie store里的cookie加到第二个请求的头部字段,谜底就这样解开了。

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用Jmeter进行http接口测试

这篇文章给大家介绍如何使用Jmeter进行http接口测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言:  主要针对http接口进行测试,使用Jmeter工具实现。  Jmter工具设计之初是用于做性能测试的,它
2023-06-21

如何进行主流Apache 2 PHP5安装使用

如何进行主流Apache 2 PHP5安装使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们大家都知道Apache 2和PHP是创建交互式网站的流行方案,而
2023-06-17

Android进程间如何使用Intent进行通信

这篇文章主要介绍“Android进程间如何使用Intent进行通信”,在日常操作中,相信很多人在Android进程间如何使用Intent进行通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android进程
2023-07-05

Java Socket通讯如何进行客户端的信息通信

本篇文章为大家展示了Java Socket通讯如何进行客户端的信息通信,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java Socket通讯在实际的使用中有很多关键代码需要我们学习,那么首先我们就
2023-06-17

如何使用 Golang 协程进行通信?

在 go 中使用协程进行通信,通道是一种基本机制,用于在协程之间发送和接收数据。通过使用发送(使用 Golang 协程进行通信在 Go 语言中,协程提供了并发编程的一种轻量级且高效的方式。它们允许在单个线程上下文中同时执行多个任务,从而提
如何使用 Golang 协程进行通信?
2024-05-21

如何使用golang中的http.Client进行HTTP请求的高级操作

如何使用golang中的http.Client进行HTTP请求的高级操作引言:在现代开发中,HTTP请求是不可避免的一部分。golang提供了强大的标准库,其中包含了http包。http包提供了http.Client结构体,用于发送HTTP
如何使用golang中的http.Client进行HTTP请求的高级操作
2023-11-18

编程热搜

目录