如何在OkHttp 3中为特定服务设置不同的连接超时?

时间:2018-02-01 13:10:07

标签: android retrofit retrofit2 okhttp okhttp3

在我的应用程序中,我的所有服务都有60 seconds connection timeout,但一项服务有3分钟。但是我只能为OkHttp 3设置一个超时?是否可以为specific service设置180秒?

OkHttpClient.Builder okHttpClient = newOkHttpClient.Builder()

                .connectTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)

改型:

retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .client(okHttpClient.build())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

1 个答案:

答案 0 :(得分:3)

所有HTTP客户端配置都存在于OkHttpClient中,包括代理设置,超时和缓存。当您需要更改单个调用的配置时,请调用OkHttpClient.newBuilder()。这将返回与原始客户端共享相同连接池,调度程序和配置的构建器。

在下面的示例中,我们发出一个500毫秒超时请求,另一个请求超时3000毫秒。

private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
Request request = new Request.Builder()
    .url("http://httpbin.org/delay/1") // This URL is served with a 1 second delay.
    .build();

// Copy to customize OkHttp for this request.
OkHttpClient client1 = client.newBuilder()
    .readTimeout(500, TimeUnit.MILLISECONDS)
    .build();
try (Response response = client1.newCall(request).execute()) {
  System.out.println("Response 1 succeeded: " + response);
} catch (IOException e) {
  System.out.println("Response 1 failed: " + e);
}

// Copy to customize OkHttp for this request.
OkHttpClient client2 = client.newBuilder()
    .readTimeout(3000, TimeUnit.MILLISECONDS)
    .build();
try (Response response = client2.newCall(request).execute()) {
  System.out.println("Response 2 succeeded: " + response);
} catch (IOException e) {
  System.out.println("Response 2 failed: " + e);
}
}

因此,您需要为每个请求创建不同的客户端。

相关问题