在python里我们经常使用 requests | urllib| httpx 等进行网络请求,那么在Java中如何实现各种网络请求呢?
httpClient ->HttpURLConnection -> Nohttp -> Okhttp
HttpClient 是 Apache下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient支持的功能如下: 支持 Http0.9、H ttp1.0和Http1.1协议。 实现了Http全部的方法(GET,POST,PUT,HEAD 等)。 支持HTTPS协议。 支持代理服务器。 提供安全认证方案。
提供连接池以便重用连接。 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。 在http1.0和http1.1中利用KeepAlive保持长连接。
HttpClient 连接池 HttpClient经常会用到连接池,以便重用tcp连接,特别是在使用长连接时能节约不少性能(避免了三次握手和四次解握)。 HttpClient连接池的逻辑是:先根据域名route 来找是否有空闲的连接,如果有就取出来用。
在后端领域,出现比较早而且使用仍然很广泛的HTTP客户端框架非Apache HttpClient莫属了,目前大量项目和公司仍在采用该框架。
Apache公司开发,在早期非常受广大作者喜爱使用, 在android升级到6.0之后就取消了对 HttpClient 的支持,推荐使用的是 HttpURLConnection,到9.0正式弃用,在我查阅了各种资料后,都没有明确说明为何弃用,都只是部分提及了高版本兼容性问题。该问题值得大家思考和证实?
( 目前个人感觉是因为安卓自己开发了HttpURLConnection使用,下架 HttpClient 及 使用时需要Apache服务插件和依赖造成的繁琐原因。只代表个人观点)
在安卓6.0之后开始取消支持后,他们自己推出并封装了HttpURLConnection供使用者使用,
菜鸟教程:7.1.3 Android HTTP请求方式:HttpURLConnection | 菜鸟教程

官方开源源码 : https://github.com/yanzhenjie/NoHttp
NoHttp是基于队列的形式请求,可以取消某个请求,可以取消某几个指定请求,可以通过队列取消所有请求。
在 HttpURLConnection 更加封装调用,只能在安卓上使用。 16年阿里开发者,并进行宣传。
小故事:
nohttp 在开发完之后,进行了大量宣传各种技术博客,论坛等多渠道都有,那个时间提及nothttp大家都会略知一二,当然当时也遭到一批抵制者,觉得宣传过度,正值httpClient逐渐被Android SDK 替换和下架的时候,nohttp逐渐崛起,后随着一直更新和完善,现在使用也是相当可以。
官方开源源码 : https://github.com/square/okhttp
一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由美国移动支付Square公司贡献。
OkHttp3是OkHttp发展到版本3.0之后的名字。在maven中央仓库搜索okhttp,可以看到包名为com.squareup.okhttp项目的最后版本号是2.7.5,而3.0版本之后,包名更改为com.squareup.okhttp3,同时版本号从3.0.0-RC1开始。后面为了区分,OkHttp 3.0之后的版本统一称为OkHttp3。特点:
目前小红书app就使用该框架,若想拦截请求及hook响应及参数,需要对该框架大致了解,及查看使用的框架api进行针对性拦截。(使用Okhttp3中的call方法,在newRealCall()中初始化了RealCall,hook-okhttp3.RealCall即可拿到请求包)
大家若有兴趣可以查看git源码 或 Okhttp3源码解析(3)-Call分析(整体流程)_秦子帅的博客-CSDN博客 博客中的分析。
创建一个maven工程,在pom.xml中引入jar包依赖:
-
-
-
org.apache.httpcomponents -
httpclient -
4.5.5 -
-


这样就可以将微博的cookie hook并从手机中发到外部服务上,进行传输。