OkHttp中的拦截器(一)

202 阅读1分钟

主要跟进execute()中的getResponseWithInterceptorChain()

-- 进入getResponseWithInterceptorChain()

  • 该方法构成了一个拦截器链,通过依次执行不同功能的拦截器,来获取服务器的响应返回。
  • 拦截器的分类:
    1. 应用程序拦截器:用户自定义拦截器(client.interceptors())
    2. Network网络拦截器
      -- 进入chain.proceed
      --进入4个参数的proceed方法, 核心代码
      • new RealInterceptorChain创建拦截器链,注意传入参数是index+1, 表示后面创建只能从下一个拦截器开始,而非当前拦截器,这样就把整个拦截器构成了一个链条。

5个拦截器的作用

1. 重定向拦截器 RetryAndFollowUpInterceptor

作用:失败重连。
其中创建了streamAllocation,主要用于获取连接服务端的connection和用于服务端进行数据传输的输入输出流。实际使用在connectInterceptor。

RetryAndFollowUpInterceptor中会对重连次数followUpCount进行判断,超过最大重连次数(默认20)后,就会释放streamAllocation对象。

2. 桥接拦截器 BridgeInterceptor

作用:设置内容长度和编码方式,压缩,添加头部信息。

  • GzipSource: 转化成解压的数据流。使用responseBody时直接以解压的方式读取流数据。