安卓逆向(二)httpClient使用


在python里我们经常使用 requests | urllib| httpx 等进行网络请求,那么在Java中如何实现各种网络请求呢?

首先我们引出几个网络请求库看一下:

httpClient ->HttpURLConnection ->  Nohttp -> Okhttp

HttpClient:
         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服务插件和依赖造成的繁琐原因。只代表个人观点)

HttpURLConnection:

在安卓6.0之后开始取消支持后,他们自己推出并封装了HttpURLConnection供使用者使用,

菜鸟教程:7.1.3 Android HTTP请求方式:HttpURLConnection | 菜鸟教程

Nohttp :    
        官方开源源码 : https://github.com/yanzhenjie/NoHttp

NoHttp是基于队列的形式请求,可以取消某个请求,可以取消某几个指定请求,可以通过队列取消所有请求。
        在 HttpURLConnection 更加封装调用,只能在安卓上使用。 16年阿里开发者,并进行宣传。

小故事:

nohttp 在开发完之后,进行了大量宣传各种技术博客,论坛等多渠道都有,那个时间提及nothttp大家都会略知一二,当然当时也遭到一批抵制者,觉得宣传过度,正值httpClient逐渐被Android SDK 替换和下架的时候,nohttp逐渐崛起,后随着一直更新和完善,现在使用也是相当可以。

Okhttp:
        官方开源源码 : https://github.com/square/okhttp
一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由美国移动支付Square公司贡献。

该框架是目前主流框架,支持http2,对一台机器的所有请求共享同一个socket,异步调用的回调函数是在子线程完成。

抛出问题,为什么有的叫 Okhttp 有的叫 Okhttp3,两者有什么联系及关联呢?
   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。
特点:

支持允许对同一主机的所有请求共享一个连接。
使用连接池降低请求延迟。
自动处理GZip压缩减少流量消耗。
缓存请求响应,避免网络重复请求。
网络出现问题时,能够静默恢复。
对于多个IP的服务,失败时能够自动切换到备用地址。
支持现代TLS功能(TLS 1.3,ALPN,证书固定)。
请求/响应API具有流畅的构建器和不变性。
支持同步请求和异步请求。
支持自定义拦截器以实现更高级的功能(例如重定向、日志打印等)。
        目前小红书app就使用该框架,若想拦截请求及hook响应及参数,需要对该框架大致了解,及查看使用的框架api进行针对性拦截。(使用Okhttp3中的call方法,在newRealCall()中初始化了RealCall,hook-okhttp3.RealCall即可拿到请求包)

大家若有兴趣可以查看git源码 或 Okhttp3源码解析(3)-Call分析(整体流程)_秦子帅的博客-CSDN博客 博客中的分析。

好的,目前正是进入我们今天的主题,httpClent 
 创建一个maven工程,在pom.xml中引入jar包依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.5</version>
    </dependency>
</dependencies>

具体操作详见:Java HttpClient爬虫请求_Codeooo的博客-CSDN博客
实际实用效果: 可搭建服务,可用于xposed-hook回发,可用于网络请求,Java爬虫等。
eg: 微博hook cookie并发送到外部服务端入库

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

猜你喜欢

转载自blog.csdn.net/qq_41369057/article/details/131302872
今日推荐