OkHttp梳理
OkHttp梳理
OkHttp的使用
-
添加依赖
-
基本代码
class Util{ public static void sendRequest(String url, Callback callback) { RequestBody requestBody = new FormBody.Builder() .add("key","content") .build(); Request request = new Request.Builder() .url(url) .build(); OkHttpClient client = new OkHttpClient(); client.newCall(request).enqueue(callback);//异步请求的方式 //同步请求方式则是调用execute方法,并且有Response类型的返回值。 } }
OkHttp的原理
-
OkHttp子系统层级结构
- 网络配置层
- 重定向层
- Header拼接层
- HTTP缓存层
- 网络连接层
- 数据响应层
-
五个默认拦截器
-
RetryAndFollowUpInterceptor(重试重定向拦截器)
当请求内部抛出异常的时候,判定是否需要重试;当响应结果是3xx重定向的时候,决定是否构建一个新的请求并发送请求。
-
BridgeInterceptor(连接桥拦截器)
负责把用户构造的请求转换为发送到服务器的请求 ,转换的过程就是添加一些服务端需要的header信息;以及把服务器返回的响应转换为用户友好的响应,是从应用程序代码到网络代码的桥梁。在Request阶段配置用户信息,并添加一些请求头。在Response阶段,进行gzip解压。
-
CacheInterceptor(缓存拦截器)
负责读取缓存以及更新缓存。
-
ConnectInterceptor(连接拦截器)
负责和服务器建立连接,这里才是真正的请求网络。同时负责了Dns解析和Socket连接(包括tls连接)。
-
CallServerInterceptor(请求服务拦截器)
执行流操作(写出请求体、获得响应数据) ,负责向服务器发送请求数据,从服务器读取响应数据,进行HTTP请求报文的封装与响应报文的解析。它是最后一个拦截器了,前面的拦截器已经完成了socket连接和tls连接,那么这一步就是传输HTTP的头部和body数据了。以及读取 response header,先构造一个 Response 对象,如果有 response body,就在 response header 的基础上加上 body 构造一个新的 Response 对象。
-
-
连接机制
- 创建连接
- 连接池
涉及的设计模式
-
建造者模式
网络配置层,利用Builder模式配置各种参数。
-
工厂方法
-
职责链模
一个Interceptor对应一个功能,所有Interceptor连接成一个Interceptor.Chain,典型的责任链模式实现。
参考: