240111-HttpGet&HttpRequestBase&HttpRequestBase的超时时间配置

49 阅读1分钟

理论

HttpGet与HttpRequestBase继承关系

HttpGet继承HttpRequestBase image.png

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());
        }
    }
}


参考文档:
www.javabyexamples.com/configuring…