Okhttp 深入 2-请求执行内核:拦截器

Posted AndroidCoding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Okhttp 深入 2-请求执行内核:拦截器相关的知识,希望对你有一定的参考价值。


微光

读完需要

4
分钟

速读仅需 2 分钟

/ Okhttp 深入 2-请求执行内核:拦截器 /

1


   

0. 核心工作:拦截器

在经过 dispatcher 的分发之后,请求任务终于来到要执行工作的步骤, 在源码中我们可以看到它的核心工作方法在getResponseWithInterceptorChain ()中,在该方法内,为我们的请求任务创建了一条任务链,串联了 5 大默认拦截器(也可转载自定义拦截器),这里运用了责任链模式,使得链上的每个拦截器对象都可以对要执行的任务做各自的操作,同时也可以对任务完成回传的结果进行自己的处理Okhttp 深入 2-请求执行内核:拦截器,链条内部先由第一位拦截器处理,处理完成之后交由下一位处理,同时等待结果返回Okhttp 深入 2-请求执行内核:拦截器,从源码我们可以看到,进行处理的第一个拦截器是RetryAndFollowUpInterceptor

2


   

1. 重试与重定向拦截器:RetryAndFollowUpInterceptor

职责:负责请求的重试,及需要重定向情况下的重定向请求

拦截方法:针对抛出的RouteExceptionIOException处理,判断需不需要重试,正常交付给下一链BridgeInterceptorOkhttp 深入 2-请求执行内核:拦截器

3


   

2. 桥接拦截器:BridgeInterceptor

职责:连接应用程序和服务器的桥梁,我们发出的请求将会经过它的处理才能发给服务器,在收到结果时进行处理(如 gzip 解压缩)

拦截方法:在这里处理了一系列的操作;补全请求头、设置编码、gzip 压缩等;正常交付给下一链CacheInterceptorOkhttp 深入 2-请求执行内核:拦截器

4


   

3. 缓存拦截器:CacheInterceptor

职责:在发出请求前,判断是否使用缓存,在收到响应后,判断是否需要缓存

拦截方法:缓存处理后交由下一链ConnectInterceptorOkhttp 深入 2-请求执行内核:拦截器

5


   

4. 连接拦截器:ConnectInterceptor

职责:打开与目标服务器的连接,并执行下一个拦截器

拦截方法:获得一份与目标服务器的连接,在这个连接上进行 HTTP 数据的收发,交付下一链CallServerInterceptor

6


   

5. 请求服务器拦截器:CallServerInterceptor

职责:在连接上进行发送接受数据

拦截方法:完成 HTTP 协议报文的封装与解析,将结果回传,至此请求与响应完成,只剩对响应的处理

7


   

6. 总结

5 大拦截器,各自分工,通过责任链模式完成了各自需要处理的部分,同时交付给下一环,在完成请求之后,对结果处理并交付给上一环,对于发送者与接受者进行了解耦,同时整理流程逻辑清晰,NICE!


以上是关于Okhttp 深入 2-请求执行内核:拦截器的主要内容,如果未能解决你的问题,请参考以下文章

OkHttp的学习

网络请求框架-OkHttp原理解析

OkHttp3 拦截器源码分析

改造:如何从 okhttp 拦截器再次重试请求?

42. OkHttp总结

java 一个OkHttp拦截器,将请求记录为curl shell命令