😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。
😊 座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍
请求超时配置
在 OkhttpClient 中有默认的一些配置,比如连接池、超时时间、写入时间、读取时间等。我们可以通过查看OkhttpClient源码得知。
默认配置如下:
连接超时时间:默认为10秒写入超时时间:默认为10秒读取超时时间:默认为10秒Follow Redirects(重定向):默认为 true,即会自动遵循重定向连接池大小:默认为5个重试次数:默认为0,即 不会自动重试请求。
但是默认配置不能满足日常需要,如何进行自定义呢,可使用 OkHttpClient.Builder() 来定制化配置。具体如下:
ConnectionPool connectionPool = new ConnectionPool(5,5, TimeUnit.MINUTES);
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS) //连接超时时间
.writeTimeout(30,TimeUnit.SECONDS) //设置写入超时时间
.readTimeout(30,TimeUnit.SECONDS)
.followRedirects(false) //禁用重定向
.connectionPool(connectionPool)
.build();
使用 OkHttpClient.Builder() 构建 OkHttpClient 对象,并且可以通过调用 builder 的方法来配置 OkHttpClient。
上述我们还定制化了连接池,
// 创建一个连接池,最大空闲连接数为5,每个连接最大保持时间为5分钟
ConnectionPool connectionPool = new ConnectionPool(5,5, TimeUnit.MINUTES);
maxIdleConnections:最大空闲连接数。keepAliveDuration:连接保持时间。
OkHttp 会自动管理连接池中的连接,根据需要重用已经存在的连接或创建新的连接。连接池会根据连接的空闲时间来关闭不再需要的连接,以节省资源。
重连机制
在 Okhttp 中不直接提供内置的重连机制,可以通过自定义Interceptor 来实现请求失败时的重试逻辑,这块涉及到拦截器的应用,具体使用如下:
package com.qiniu.interceptortest;
import androidx.annotation.NonNull;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import okhttp3.*;
public class ReConnectionTest {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new RetryInterceptor(3))
.build();
//创建请求
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
// 使用 OkHttpClient 实例来发送请求,并处理响应。
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
System.out.println("Request failed: " + e.getMessage());
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
// 处理响应数据
if (response.isSuccessful()) {
String responseData = response.body().string();
System.out.println(responseData);
// 处理响应数据
} else {
// 处理失败响应
}
}
});
}
static class RetryInterceptor implements Interceptor{
private int maxRetries;
private int retryCount = 0;
public RetryInterceptor(int maxRetries) {
this.maxRetries = maxRetries;
}
@NonNull
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
while (!response.isSuccessful() && retryCount < maxRetries){
retryCount++;
response = chain.proceed(request);
}
return response;
}
}
}
通过拦截器来实现重连机制,拦截器用于在发送请求和接收响应的过程中拦截、修改和处理请求和响应数据。拦截器允许开发人员在网络请求的不同阶段介入,并对请求和响应进行各种操作,如修改请求头、记录日志、重试请求、添加认证信息等。
人生像一部电影,有些人就像弹出来的广告
- 攻城掠地广结名士需要什么材料攻城掠地广结名士活动需要准备宝马、美酒、书画三种核心材料,具体需求量根据活动周期和参与方式有所不同。若全程不使用金币,三天活动...
- 黑木耳的功效与作用以及营养价值黑木耳是一种营养丰富的食用菌类,富含蛋白质、膳食纤维、维生素和矿物质等物质,具有多种对人体有益的功效与作用,如补血益气、润肠通...
- 王者荣耀兽痕和狩猎,王者荣耀兽痕和狩猎哪个好王者荣耀兽痕和狩猎,王者荣耀兽痕和狩猎哪个好 王者荣耀是一款大型手机游戏,拥有多种英雄和装备选择。在游戏中,两个重要的召唤师技能...
- 美的空调怎样抽湿,自己先逐步的来检测下空调故障可能会给我们带来诸多麻烦,但是通过了解一些常见问题及其解决方法,我们可以更好地处理空调故障。本文美的空调怎样抽湿将为您...
- 怀仁十一中怎么样,见2023年排名怀仁市第十一中学怎么样?周边趣小编根据2022朔州高中招生分数线,统计出怀仁十一中在25所朔州高中排名第18位。(注:本朔州2022年中考分数...
- 12306有些班次突然不显示了?买完票发现车次没了?为什么12306有些班次突然不显示了,有可能是该班次今天不售卖车票,也有可能是查询时间太晚查不到车次,还有可能是软件出现了问题、区域网络信...
- dnf90级史诗去哪刷?这几个地方你不能错过!兄弟们,今天来聊聊DNF里90级史诗那点事儿。作为一个老玩家,当年为搞一套90级的装备,那可真是下不少功夫!今天就来给大伙儿分享分享我的...
- 云闪付怎么使用云闪付作为一种便捷的数字支付工具,已经广泛应用于人们的日常生活中。无论是线上购物还是线下消费,云闪付都能提供安全、快速的支付体...
- 广电杂谈‖山西省内有线电视网络整合到底咋样了?当前,深入推进全国有线电视网络整合与广电5G一体化发展仍是广电有线的重点工作,而新的整合目标方面则提出了未完成“省内一张网”的亟...
- 家常羊蝎子的做法羊蝎子汆水后热水洗净,入热水锅,开大火煮。 炒锅内入大葱、桂皮、八角、生姜、花椒、小茴香,无油小火炒香。 炒香的辅料倒入汤锅,水...