首页 > 其他分享 >JDK调用工具(三)

JDK调用工具(三)

时间:2024-07-18 15:56:17浏览次数:14  
标签:拦截器 请求 JDK 响应 调用 构建 OkHttp 工具 重定向

1. OkHttp的拦截机制

OkHttp的拦截机制运用了责任链设计模式,允许拦截器以链式方式工作,每个拦截器都可以处理请求和响应,并将请求或响应传递给链中的下一个拦截器。这种机制极大地增强了OkHttp的灵活性和可扩展性。

具体来说,每个拦截器在OkHttp的请求/响应流程中扮演着“处理者”的角色,它们可以根据需要修改请求(如添加头信息、执行身份验证)、处理响应(如检查状态码、读取响应体)或执行诸如重试逻辑、重定向、日志记录等高级功能。每个拦截器完成其工作后,都会调用链中的下一个拦截器,直到请求被发送到服务器或响应被完全处理。

OkHttp提供了五种内置的拦截器实现请求到响应的基本需求,并且可以自定义拦截器实现定制化的需求,源码参考具体如下。

OkHttp的拦截链如图所示:

2. RetryAndFollowUpInterceptor

RetryAndFollowUpInterceptor的源码如下:

这段源码说明了当执行发生RouteException和IOException的时候,会根据recover方法的返回判断是否重试。

需要关注的是第一个判断if (!client.retryOnConnectionFailure),这个是能直接影响的并且可以控制是否重试的一个参数,当在构建OkHttpClient的时候可以设置该参数。

当调用成功获取返回之后,又会校验响应中是否有重定向参数,然后重新组装请求参数,继续循环调用处理请求。重定向的最大次数MAX_FOLLOW_UPS=20次。

followUpRequest是构建重定向的请求,从源码中可以知道会根据响应CODE决定是否重试和发送重定向请求。

当响应CODE是3XX的时候,会构建重定向请求。

构建重定向的时候需要关注的是if (!client.followRedirects) 这个判断,这个配置是在构建OKHttpClient的时候设置的值。当配置了这个属性的时候会发送重定向请求。

从源码中可以看出RetryAndFollowUpInterceptor的主要作用重试和重定向。并且可以在构建OkHttpClient的时候设置是否启用RetryAndFollowUpInterceptor的重试和重定向功能,最大重定向次数为20次。构建OkHttpClient的时候,内置的提供的Builder的followRedirects方法和retryOnConnectionFailure可以设置是否重定向和重试。

3. BridgeInterceptor

BridgeInterceptor的源码说明为应用层到网络层的桥梁。首先会根据用户请求构建网络请求,然后继续在拦截链中传送,最终从网络响应中构建用户响应。源码如下:

当请求执行到BridgeInterceptor之后,首先会根据Request获取一个新的Request.Builder,然后根据用户请求构建新的Request,对请求添加Content-Type、Content-Length、Transfer-Encoding、Host、Connection、Accept-Encoding、Cookie、User-Agent,将请求转换成网络层真正可执行的请求。                        

网络请求处理完成之后,首先会处理Cookie,如果有将响应header中的cookie存入cookieJar,然后构建用户响应对象返回。

4. CacheInterceptor

缓存拦截器提供网络请求缓存的读取。如果每次请求都经过网络的发送和读取,会很耗时。CacheInterceptor的作用就是缓存请求的响应。默认是没有处理Cache的,构建OkHttpClient的时候设置自己的Cache。是否使用缓存可以在构建Request的时候,设置请求对应的CacheControl。请求缓存会根据是否配置使用缓存,是否有Cache,缓存的有效时间,缓存的策略综合计算。

5. ConnectInterceptor

ConnectInterceptor的核心功能如下:

(1)建立连接:在发送请求之前,ConnectInterceptor负责与目标服务器建立连接。这包括解析主机名、创建Socket连接等操作。OkHttp支持连接池来重用之前已经建立的连接,从而提高性能和减少延迟。OkHttpClient有默认的ConnectionPool,也可以在构建OkHttpClient的时候设置自己的ConnectionPool。

(2)SSL握手:如果请求需要通过HTTPS发送,ConnectInterceptor还负责进行SSL握手,确保通信的安全性。这一步骤包括与服务器协商加密算法、验证证书有效性等。

(3)代理服务器支持:如果请求需要通过代理服务器发送,ConnectInterceptor也会负责与代理服务器建立连接,并通过代理服务器转发请求到目标服务器。

6. CallServerInterceptor

CallServerInterceptor的核心功能是发起网络请求,接受处理响应,核心是使用okio实现读写,而okio实际上还是用的Socket。

7. 自定义拦截器

OkHttp提供了强大的拦截机制,允许开发者在请求发送前后、响应接收前后插入自定义逻辑。默认情况下,OkHttp已经内置了几个核心拦截器来处理诸如缓存、重试、连接复用等关键功能。然而,为了满足特定业务场景下的定制化要求,OkHttp同样支持自定义拦截器。

自定义拦截器示例如下:

public class CustomInterceptor implements Interceptor {
        @NotNull
        @Override
        public Response intercept(@NotNull Chain chain) throws IOException {
            // TODO 自定义拦截逻辑
            Request request = chain.request();
            String url = request.url().toString();
            System.out.println("intercept: proceed start: url" + url + ", at " + System.currentTimeMillis());
            Response rep = chain.proceed(request);
            System.out.println("intercept: proceed end: url" + url + ", at " + System.currentTimeMillis());
            return rep;
        }
}

标签:拦截器,请求,JDK,响应,调用,构建,OkHttp,工具,重定向
From: https://blog.csdn.net/pig_Struggle/article/details/140525263

相关文章

  • 强烈推荐:18.3k star,推荐一款简单易用的HTTP请求流量录制回放工具:Goreplay
    在软件开发和测试过程中,我们经常需要对应用程序的网络请求进行录制和回放,以便进行性能分析、压力测试或者模拟复杂的网络环境。今天,我要向大家推荐一款简单易用的HTTP请求流量录制回放工具:Goreplay。1、简介Goreplay是一款用Go语言编写的HTTP请求流量录制回放工具。它可......
  • 分析nirsoft出品的几个日志查看工具 windows
    介绍官网https://www.nirsoft.net/包含lastactivityview(程序打开日志查看)、turnedontimesview(系统开关机日志)、winlogonview(系统登陆日志查看)以上三个均为个人经常使用,并已经打好中文补丁。均为绿色免安装版本,解压直接食用。打包下载下载:https://damon8.lanzoub.com/izGOX2......
  • PlantUML-UML 绘图工具安装、Graphviz安装、本地使用/在线使用、语法、图示案例
    文章目录前言本地安装vscode安装插件下载安装Graphviz配置Graphviz环境变量测试在线使用演示PlantUML语法总结活动图(新语法)时序图类图用例图其他图更多相关内容可查看前言本篇提供两种使用方式分别为在线使用地址1:https://www.planttext.com/在线使用地址2vsco......
  • 独立站运营常用工具,新手必备
    新手在独立站的运营上,可能没有头绪,不知道自己网站存在什么问题,该如何进行优化,这边推荐一些新手必备工具,可以帮助你在独立站运营的过程中事半功倍,轻松超越同行。1、SEO工具要提升独立站的谷歌搜索排名,被更多用户看到,seo优化是必须要做的,谷歌自身就提供一些免费的seo工具,比如G......
  • 跨平台文件传输工具盘点,ToDesk性能最优
    当代打工人少不了经常需要在手机电脑上互传文件,作为工作文件备份或是方便随时查看。那么互传文件有什么简单高效的工具吗?今天小编来盘点几款跨平台文件传输工具,可以手机电脑互通传输,工作生活上都能用到!需要的话不妨收藏+转发,下次再想找就很方便啦!微信:聊天软件也能传文件微信......
  • 2024最新的AI绘画工具 Stable Diffusion 整合包安装教程,SD安装分享(附整合包)
    大家好,我是灵魂画师向阳自从AI绘画开始进入大众视野之后,AI绘画工具StableDiffusion技术以其创新的人工智能能力而著称,它拥有根据用户输入的文字描述来创造细致且富有表现力的图像的独特本领。SD不仅能够生成图像,还能执行图像修复、扩展以及在文本指导下的图像变换等多样......
  • 快速上手FFUF:一款高效的网络模糊测试js文件爆破工具
    在网络安全领域,FFUF不仅是一款功能强大的工具,适用于目录发现、子域名发现、以及HTTP方法模糊测试,还是一款js爆破工具。本文将引导你快速掌握FFUF的使用方法,不需要复杂的背景知识,适合基础小白学习。什么是FFUF?FFUF,即FuzzFasterUFool,是一款用Golang编写的快速网络......
  • PSINS工具箱函数介绍——gpsplot
    介绍gpsplot函数的原理和作用程序源码functiongpsplot(vpGPS,ts)%GPSplot.%%Prototype:gpsplot(vpGPS,ts)%Inputs:vpGPS-[vnGPS,posGPS,tag,t]or[posGPS,tag,t]%thetagcolumnmaynotexist.%ts-GPSsamplinginterva......
  • 笔灵AI论文工具好用吗?期刊论文撰写的智能革新
    期刊论文的撰写是一项既考验专业知识和研究深度,又考验写作能力和时间管理的复杂任务。面对这一挑战,AI技术的飞速发展为我们带来了新的机遇。笔灵AI论文写作助手,作为我的宝藏工具,将如何助力我们在这个过程中变得更加高效和专业?让我们一起探索。笔灵AI论文—期刊论文撰写的智能......
  • AI论文工具能否帮助我完成期刊论文? 笔灵AI论文的智能革新
    期刊论文的撰写既考验大家的专业知识和研究深度,又考验着大家的写作能力和时间管理,无疑是个具有挑战性的任务。但今天,随着AI技术的飞速发展,五花八门的AI工具应运而生,不得不提到我的宝藏神奇—笔灵AI论文写作助手,我带领大家一同探索这款工具如何让期刊论文撰写变得更加高效、专业......