这是我参与11月更文挑战的第13天,活动详情查看:11月更文挑战
Java中Http请求的方式很多, OkHttpClient因其独特的特性,非常适合在常见的场景中使用.
1 OkHttpClient的简介
1 OkHttpClient说明
OkHttpClient是一个高效的HTTP客户端,其特性包含:
- 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接
- 连接池减少请求延时
- 透明的GZIP压缩减少响应数据的大小
- 缓存响应内容,避免一些完全重复的请求
2 OkHttpClient使用步骤
- 创建OkHttpClient对象
- 创建Request对象
- 将Request 对象封装为Call
- 通过Call 来执行同步或异步请求,调用execute方法同步执行,调用enqueue方法异步执行
3 OkHttpClient案例
1 | java复制代码@Slf4j |
Interceptor拦截器
1 | java复制代码@Slf4j |
OkHttpClient对象
通过其内部类Builder的构造器模式,进行属性参数的初始化,常见的包括: 任务调度,协议,连接池,连接超时,读取超时等属性.
1 | java复制代码 public static final class Builder { |
Request对象
通过其内部类构造器模式,进行属性参数的初始化,常见的包括: 请求地址url,请求方式,请求头,请求体,标签参数等, 并且该构造中默认是GET请求.
1 | java复制代码 open class Builder { |
Call对象
通过OkHttpClient和Request对象构造Call对象,Call接口的唯一实现类RealCall. 其execute方法表示同步执行, enqueue方法表示异步执行.
1 | java复制代码 override fun execute(): Response { |
Interceptor拦截器
Interceptor为所有拦截器的接口, 其实现类有 桥接拦截器BridgeInterceptor, 缓存拦截器CacheInterceptor, 服务拦截器CallServerInterceptor, 错误、重定向拦截器RetryAndFollowUpInterceptor, 连接拦截器ConnectInterceptor.
Call中execute方法调用的getResponseWithInterceptorChain()方法, 创建一个拦截器集合容器,首先添加用户自定义的拦截器, 错误、重定向拦截器,桥接拦截器,缓存拦截器,连接拦截器,服务拦截器.
整个拦截器执行链路,按照添加先后顺序执行,即先执行用户自定义拦截器.
1 | java复制代码 internal fun getResponseWithInterceptorChain(): Response { |
4 OkHttpClient常用工具类:
1 | java复制代码@Slf4j |
参考资料:
本文转载自: 掘金