• okhttp初识拦截器


    拦截器流程:

    简单回顾同步 / 异步:

    同步请求就是执行请求的操作是阻塞式,直到HTTP响应返回。

    异步请求就类似于非阻塞式的请求,它的执行结果一般都是通过接口回调的方式告知调用者。 

    okHttp拦截器:

    来自官网的解释:拦截器是OkHttp中提供一种强大的机制,它可以实现网络监听、请求以及响应重写、请求失败重试等功能。

    下面来看一下官网的一张介绍拦截器的图:

    其中Okhttp包含Application Interceptors【应用拦截器】、系统拦截器、Network Interceptors【网络拦截器】,其中咱们接下来要分析的就是从系统自带的拦截器开始,那系统拦截器都有哪些呢,如下图:

    关于这些系统拦截器在接下来会一一进行详细分析的,目前先有个大致的印象。

    拦截器链介绍:

    有了上面的理论了解之后,下面则从源码的角度来对拦截器进行一个进一步了解,这里以同步请求为例,因为异步请求关于拦截器这块基本上一样:

    进一步定位:

    那接下来将注意力集中在RealInterceptorChain.proceed()方法中:

    然后此时在这个方法中有个核心代码:

    这样就将若干个拦截器以链式的方式进行执行,这也是拦截器链的主要作用。下面总结一下拦截器:

    1、创建一系列的拦截器,并将其放入到一个拦截器list中。

    2、创建一个拦截器链RealInterceptorChain,并执行拦截器链的proceed方法。

    那目前对于拦截器怎么链起来的有了一个大局观,那到底每个拦截器是怎么来衔接的呢?这里以一个具体的拦载器为例初步进行分析:RetryAndFollowUpInterceptor:

    所以将目光集中在这个方法之上,代码比较多,这里先只看核心的:

    而如之前所分析,我们知道RealInterceptorChain在proceed()方法中又会去获取下一个拦截器继续往下链,如下:

    如此循环,就会将所有的拦截器依顺序一个个去执行完成,这也就是拦截器的一个核心实现逻辑。所以下面对拦截器的具体逻辑再总结一下:

    1、在发起请求前对request进行处理。

    2、调用下一个拦截器,获取response。

    3、对response进行处理,返回给上一个拦截器。

  • 相关阅读:
    双重标准,我该怎么解决
    今天突然点开一个网页
    反省
    (无)
    (无)
    GetModuleHandleW 分析
    关于逆向360相关的一点感想
    OpenGL的编译和使用
    360 补天平台,也没个什么人啊。。。
    openssl编译方法
  • 原文地址:https://www.cnblogs.com/webor2006/p/9096412.html
Copyright © 2020-2023  润新知