Okhttp总是重试连接失败

tyc*_*czj 6 android retrofit2 okhttp3

如果我创建请求并且该请求返回4xx错误,则Retrofit/Okhttp会继续重试请求.我设置retryOnConnectionFailure为false并设置15秒的超时但这一切似乎都被忽略了.我错过了什么?

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();
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用改造2.3.0和okhttp版本3.8.1

编辑

我确实看到的一件事是,如果我设置5秒的超时,它完美地保持重试5秒然后给我一个失败,但是如果我把它提高到10秒它只是继续前进并最终停止大约2分钟.

tyc*_*czj 4

问题是这retryOnConnectionFailure不适用于408响应,因此它仍然会自动重试这些响应