如何在Apache HttpClient 4.5中设置默认超时? (流利)

时间:2018-03-29 16:44:25

标签: java timeout apache-httpclient-4.x

我在Java控制台应用程序中使用Apache HttpClient 4.5(具有流畅的界面)。我注意到,它的默认超时值似乎是无限的,但我必须对我发送的请求使用非无限超时值。我想对所有请求使用相同的超时值。

如何全局设置默认的连接超时和套接字超时值,以便我不必在发送请求的代码中的每个位置设置它们? (记住我使用流畅的界面)

实施例

现在,我发送请求的代码中的每个地方都做了类似的事情:(简单示例)

HttpResponse response = Request.Get(url)
   .connectionTimeout(CONNECTION_TIMEOUT) // <- want to get rid of this
   .sessionTimeout(SESSION_TIMEOUT)       // <- and this
   .execute()
   .returnResponse();

我想做的是在程序开始时一劳永逸地设置默认值。类似的东西:

SomeImaginaryConfigClass.setDefaultConnectionTimeout(CONNECTION_TIMEOUT);
SomeImaginaryConfigClass.setDefaultSessionTimeout(SESSION_TIMEOUT);

这样我就可以发送这样的请求

HttpResponse response = Request.Get(url).execute().returnResponse();

不在每次调用时设置超时参数。

我在网上看到了一些答案,但它们要么是旧版本的Apache HttpClient(即不起作用),要么就是讨论使用构建器或传递配置类或其他方法过于复杂为了我的需要。我只是想设置默认的超时值,没有比这更好的了。我在哪里这样做?

1 个答案:

答案 0 :(得分:5)

可以使用自定义Executor来执行此操作

RequestConfig requestConfig = RequestConfig.custom()
        .setConnectTimeout(5000)
        .setSocketTimeout(5000)
        .build();
SocketConfig socketConfig = SocketConfig.custom()
        .setSoTimeout(5000)
        .build();
CloseableHttpClient client = HttpClients.custom()
        .setDefaultRequestConfig(requestConfig)
        .setDefaultSocketConfig(socketConfig)
        .build();

Executor executor = Executor.newInstance(client);
executor.execute(Request.Get("http://thishost/")).returnResponse();
executor.execute(Request.Get("http://thathost/")).returnResponse();