理论
HttpGet与HttpRequestBase继承关系
HttpGet继承HttpRequestBase
HttpRequestBase的超时时间配置
通过RequestConfig配置,RequestConfig类里定义了常用的请求参数,如:
private final int connectionRequestTimeout;
private final int connectTimeout;
private final int socketTimeout;
具体方式:
final RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(1000)
.setConnectTimeout(1000)
.setSocketTimeout(1000)
.build();
配置方式一:每次请求时配置
HttpRequestBase的类变量:
private ProtocolVersion version;
private URI uri;
private RequestConfig config;
具体方式:
final HttpGet httpGet = new HttpGet(GET_URL);
httpGet.setConfig(requestConfig);
配置方式二:创建一个带有超时配置的HttpClient
HttpClientBuilder的类变量:
private RequestConfig defaultRequestConfig;
具体方式:
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultRequestConfig(requestConfig)
.build()
两种方式的完整写法都可以从参考文档中拿来即用!!!
如下(拿出来以防走丢):
配置方式一:
public void executeAndSetTimeoutWithRequestConfigPerRequest() throws Exception {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
final RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(1000)
.setConnectTimeout(1000)
.setSocketTimeout(1000)
.build();
final HttpGet httpGet = new HttpGet(GET_URL);
httpGet.setConfig(requestConfig);
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
EntityUtils.consumeQuietly(response.getEntity());
}
}
}
配置方式二:
public void executeAndSetTimeoutWithRequestConfig() throws Exception {
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(1000)
.setConnectTimeout(1000)
.setSocketTimeout(1000)
.build();
try (CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultRequestConfig(requestConfig)
.build()) {
final HttpGet httpGet = new HttpGet(GET_URL);
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
EntityUtils.consumeQuietly(response.getEntity());
}
}
}