如果我创建了一个请求并且该请求返回4xx
错误Retrofit/Okhttp会不断重试请求。我已将retryOnConnectionFailure
设置为false,并将超时设置为15秒,但似乎都被忽略。我错过了什么?Okhttp总是重试失败的连接
private static OkHttpClient getClient() {
return new OkHttpClient.Builder()
.addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(BuildConfig.DEBUG ? HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE))
.readTimeout(15, TimeUnit.SECONDS)
.connectTimeout(15, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.addInterceptor(chain -> {
Request request = chain.request()
.newBuilder()
.build();
return chain.proceed(request);
}).build();
}
public static Retrofit getRetrofitClient(Gson gson){
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(OkHttpLogger.getClient());
if(gson != null){
builder.addConverterFactory(GsonConverterFactory.create(gson));
}else{
builder.addConverterFactory(GsonConverterFactory.create());
}
return builder.build();
}
我使用改装2.3.0
和okhttp版本3.8.1
编辑
一个我看到的是,如果我设置了5秒的超时它完美地保持重试5秒然后给我一个失败,但如果我碰到了10秒,它只是继续前进,最后停止约2分钟。
您的拦截器是否负责允许请求继续?作为禁用静默请求重试的已知开关,您正确实施'retryOnConnectionFailure(false)'。 –
@ M.Palsich删除拦截器没有效果。我所看到的一件事是,如果我设置了5秒的超时时间,它完美地保持了5秒的重试时间,然后给了我一个失败,但是如果我将它撞到10秒钟,它会继续前进,最后停止约2分钟。 – tyczj
您是否在具有自己的TCP SYN重试设置的环境中存在的模拟器中进行测试?例如,Linux可以设置自己的TCP SYN重试限制。 –