`
gaozzsoft
  • 浏览: 424977 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

HttpClient 4.5.2版本设置连接超时时间-CloseableHttpClient设置Timeout

    博客分类:
  • J2EE
 
阅读更多

HttpClient  4.5版本设置连接超时时间-CloseableHttpClient设置Timeout(区别于4.3.2)

 

HttpClient升级到4.5版本后,API有很多变化,HttpClient 4之后,API一直没有太稳定,我感觉4.5版本抽象后,很多API应该快稳定了。

       使用HttpClient,一般都需要设置连接超时时间和获取数据超时时间。这两个参数很重要,目的是为了防止访问其他http时,由于超时导致自己的应用受影响。

       4.5版本中,这两个参数的设置都抽象到了RequestConfig中,由相应的Builder构建,具体的例子如下:

CloseableHttpClient httpclient = HttpClients.createDefault();  
HttpGet httpGet = new HttpGet("http://stackoverflow.com/");  
RequestConfig requestConfig = RequestConfig.custom()  
        .setConnectTimeout(5000).setConnectionRequestTimeout(1000)  
        .setSocketTimeout(5000).build();  
httpGet.setConfig(requestConfig);  
CloseableHttpResponse response = httpclient.execute(httpGet);  
System.out.println("得到的结果:" + response.getStatusLine());//得到请求结果  
HttpEntity entity = response.getEntity();//得到请求回来的数据

setConnectTimeout:设置连接超时时间,单位毫秒。

setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。

setSocketTimeout:请求获取数据的超时时间,单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。

===========================================

昨天遇到一个问题需要设置CloseableHttpClient的超时时间,查了官方文档如下。

新建一个RequestConfig:

RequestConfig defaultRequestConfig = RequestConfig.custom()
    .setSocketTimeout(5000)
    .setConnectTimeout(5000)
    .setConnectionRequestTimeout(5000)
    .setStaleConnectionCheckEnabled(true)
    .build();

这个超时可以设置为客户端级别,作为所有请求的默认值:

CloseableHttpClient httpclient = HttpClients.custom()
    .setDefaultRequestConfig(defaultRequestConfig)
    .build();

Request不会继承客户端级别的请求配置,所以在自定义Request的时候,需要将客户端的默认配置拷贝过去:

 
HttpGet httpget = new HttpGet("http://www.apache.org/");
RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
    .setProxy(new HttpHost("myotherproxy", 8080))
    .build();
httpget.setConfig(requestConfig);

 

4.3版本的超时是这样的:

public static String httpPost(String url, String jsonString) {
    // 设置HTTP请求参数
String result = null;
    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(url);
    try {
        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);//设置请求超时时间 10s
StringEntity entity = new StringEntity(jsonString);
        entity.setContentEncoding("UTF-8");
        entity.setContentType("application/json");
        httpPost.setEntity(entity);
        HttpEntity resEntity = httpClient.execute(httpPost).getEntity();
        result = EntityUtils.toString(resEntity, "UTF-8");
    } catch (Exception e) {
        logger.error("http接口调用异常:url is::" + url, e);
        return null;
    } finally {
        httpClient.getConnectionManager().shutdown();
    }
    return result;
}

 

4.5.2版本是这样的:

 public static String testTimeout(String url) {

        // 设置HTTP请求参数

        String result = null;

        CloseableHttpClient client = HttpClients.createDefault();

        HttpGet httpGet = new HttpGet(url);

        RequestConfig requestConfig = RequestConfig.custom()

                .setConnectTimeout(50000).setConnectionRequestTimeout(10000)

                .setSocketTimeout(50000).build();

        httpGet.setConfig(requestConfig);

        try {

            CloseableHttpResponse response = client.execute(httpGet);

            result = EntityUtils.toString(response.getEntity(), "UTF-8");

        } catch (ClientProtocolException e) {

            logger.error("http接口调用异常:url is::" + url, e);

            return null;

        } catch (Exception e) {

            logger.error("http接口调用异常:url is::" + url, e);

            return null;

        } finally {

            try {

                client.close();

            } catch (IOException e) {

                logger.error("http接口调用异常:url is::" + url, e);

            }

        }

        return result;

    }

 

 

分享到:
评论

相关推荐

    httpclient-4.5.2.jar

    httpclient jar包

    httpclient-4.5.2.jar.zip

    - **连接池配置**:根据应用需求调整连接池的最大连接数和超时时间,以平衡资源使用和响应速度。 - **线程池管理**:使用线程池并发处理多个请求,避免创建过多线程消耗资源。 - **异步执行**:利用`...

    httpclient-4.5.2-API文档-中英对照版.zip

    赠送jar包:httpclient-4.5.2.jar; 赠送原API文档:httpclient-4.5.2-javadoc.jar; 赠送源代码:httpclient-4.5.2-sources.jar; 包含翻译后的API文档:httpclient-4.5.2-javadoc-API文档-中文(简体)-英语-对照...

    httpclient-4.5.2-API文档-中文版.zip

    赠送jar包:httpclient-4.5.2.jar; 赠送原API文档:httpclient-4.5.2-javadoc.jar; 赠送源代码:httpclient-4.5.2-sources.jar; 包含翻译后的API文档:httpclient-4.5.2-javadoc-API文档-中文(简体)版.zip ...

    httpclient 4.X版本下载有的带源码包

    2017-12-20 09:28 2,348,172 httpclient-4.5.2-javadoc.jar 2017-01-08 11:15 707,899 httpclient-4.5.2-sources.jar 2016-12-12 14:46 736,658 httpclient-4.5.2.jar 2018-03-28 17:13 747,794 httpclient-4.5.3....

    HttpClient4.5.2

    用户可以自定义连接池大小、超时设置等参数。 2. **请求和响应模型**:HttpClient提供了`HttpGet`, `HttpPost`等类来表示HTTP请求,以及`HttpResponse`来处理响应。这些类允许添加请求头、设置请求方法、携带请求体...

    Common-httpClient各个版本jar及源码

    用快压解压 Common-httpClient各个版本jar及源码

    commons-codec-1.3.jar,commons-httpclient-3.1.jar,commons-logging-1.1.jar)

    在添加依赖后,开发者可以使用Apache HttpClient来创建HTTP连接,设置请求头,准备POST请求,并使用Commons Codec库处理任何需要编码的参数。同时, Commons Logging库则可以帮助他们记录执行过程中遇到的问题。 在...

    httpclient-4.5jar

    httpclient-4.5所需jar包,里面包含httpclient-4.5.jar等等10个必须的开发包。 1.commons-codec-1.9.jar 2.commons-logging-1.2.jar 3.fluent-hc-4.5.jar 4.httpclient-4.5.jar 5.httpclient-cache-4.5.jar 6....

    httpclient-4.5.2.jar安卓网络请求

    2. 设置超时:可以为连接、读取和写入设置超时时间,防止请求无响应。 3. 请求头和参数:可以通过`addHeader`和`setEntity`方法添加自定义请求头和POST参数。 4. 安全性:对于HTTPS请求,可以配置SSLContext和X509...

    httpclient4.5.3 jar完整包含所有依赖包

    HttpClient 4.5.3 (GA) is a maintenance release that fixes a number of defects found since 4.5.2. Please note that as of 4.4 HttpClient requires Java 1.6 or newer. Changelog: ------------------- * ...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    1. **创建HttpClient实例**:首先,需要创建一个HttpClient实例,可以设置连接超时、重试策略等参数。 2. **选择HttpMethod**:根据实际需求选择合适的HttpMethod,比如使用GetMethod或PostMethod。 3. **设置请求...

    httpcomponents-httpclient-4.5.8-bin-src.zip

    Http协议使用封装jar包(commons-codec-1.3.jar、commons-httpclient-3.1.jar、commons-logging-1.1.jar),资源包括: commons-codec-1.11.jar; commons-logging-1.2.jar;...jna-platform-4.5.2.jar

    httpclient-4.5.5-API文档-中文版.zip

    赠送jar包:httpclient-4.5.5.jar; 赠送原API文档:httpclient-4.5.5-javadoc.jar; 赠送源代码:httpclient-4.5.5-sources.jar; 包含翻译后的API文档:httpclient-4.5.5-javadoc-API文档-中文(简体)版.zip ...

    httpclient-4.5.6-API文档-中文版.zip

    赠送jar包:httpclient-4.5.6.jar; 赠送原API文档:httpclient-4.5.6-javadoc.jar; 赠送源代码:httpclient-4.5.6-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.6.pom; 包含翻译后的API文档:httpclient...

    httpcore-4.2.4,httpclient-4.2.5,httpclient-cache-4.2.5,httpmime-4.2.5的jar包下载

    HttpClient提供了丰富的功能,如支持认证、重定向、Cookie管理、请求和响应的处理,以及自定义请求头等。此外,HttpClient还支持异步操作,可以用于并发执行多个HTTP请求,这对于并发性能有较高要求的系统来说非常...

    commons-httpclient-3.1.jar

    HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta...

    httpclient-4.5.13.jar中文-英文对照文档.zip

    注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...

    commons-httpclient-3.1jar包

    1. 创建HttpClient实例:可以通过HttpParams配置参数,如超时时间、编码等。 2. 创建HttpMethod:根据需求选择合适的HttpMethod子类,设置请求URL、请求头和请求体。 3. 执行请求:调用HttpClient的execute方法,...

Global site tag (gtag.js) - Google Analytics