跳到主要内容

简述Okhttp拦截器,addInterceptor 和 addNetworkdInterceptor区别 ?

参考答案:

OkHttp 是一个高效的 HTTP 客户端,它允许你使用拦截器(Interceptor)来修改请求或响应,或者执行一些其他的任务,如日志记录、重试机制等。在 OkHttp 中,有两种类型的拦截器:应用拦截器(Application Interceptors)和网络拦截器(Network Interceptors)。

1. 拦截器概述

拦截器是一个强大的特性,它允许你在请求被发送或响应被接收时插入自定义的代码。你可以使用拦截器来查看、修改、重试请求或响应,或者执行任何其他的网络任务。

2. addInterceptor(应用拦截器)

  • 位置:应用拦截器在 OkHttp 的堆栈中位于最高层,它可以观察并修改应用层的数据。
  • 功能:应用拦截器可以修改请求的 URL、头信息或请求体。它也可以修改响应的体或头信息。
  • 使用场景:如果你需要修改或观察应用层的请求和响应数据,或者需要实现通用的功能(如日志记录、请求重试等),那么应用拦截器是一个好选择。

3. addNetworkInterceptor(网络拦截器)

  • 位置:网络拦截器位于 OkHttp 堆栈的较低层,更接近实际的网络操作。
  • 功能:网络拦截器可以观察并修改更低级别的网络数据,包括在 HTTP/2 中被多路复用的请求和响应。
  • 使用场景:如果你需要观察或修改 HTTP/2 级别的数据,或者需要实现一些特定的网络功能(如重试失败的连接),那么网络拦截器可能更合适。

4. 差异总结

  • 位置与功能:应用拦截器在堆栈的高层,可以修改应用层的数据;网络拦截器在较低层,可以观察或修改更底层的网络数据。
  • 使用场景:应用拦截器通常用于实现通用的功能,如日志记录、请求重试等;网络拦截器则更多用于处理与 HTTP/2 或特定网络功能相关的任务。

注意事项

  • 拦截器的执行顺序:应用拦截器在发送请求之前和接收响应之后执行,而网络拦截器在建立连接之后和获取响应之前执行。
  • 小心使用拦截器:过度使用或不当使用拦截器可能会引入不必要的复杂性或性能问题,因此应该谨慎选择何时以及如何使用它们。