博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HttpClient设置超时(转)
阅读量:6043 次
发布时间:2019-06-20

本文共 3506 字,大约阅读时间需要 11 分钟。

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

 

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

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

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

[java]   
 
  1. <code class="hljs go" style="font-family:'Courier New',Courier,monospace; font-size:1em">CloseableHttpClient httpclient = HttpClients.createDefault();    
  2. HttpGet httpGet = new HttpGet("http://stackoverflow.com/");    
  3. RequestConfig requestConfig = RequestConfig.custom()    
  4.         .setConnectTimeout(5000).setConnectionRequestTimeout(1000)    
  5.         .setSocketTimeout(5000).build();    
  6. httpGet.setConfig(requestConfig);    
  7. CloseableHttpResponse response = httpclient.execute(httpGet);    
  8. System.out.println("得到的结果:" + response.getStatusLine());//得到请求结果    
  9. HttpEntity entity = response.getEntity();//得到请求回来的数据</code>  

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

  http://www.dotdy.com/  

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);//设置请求超时时间 10sStringEntity 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;

    }

转自:http://blog.csdn.net/h254532699/article/details/54342470

你可能感兴趣的文章
这是就是联想?2年4次因同一问题返售后,售后找不到确切原因。。。。。
查看>>
10、spss做最优尺度分析
查看>>
OCMaskedTextField
查看>>
Linux命令学习总结:reboot命令
查看>>
【Oracle】使用hanganalyze 命令分析数据库hang【转】
查看>>
Python 应用剖析工具介绍
查看>>
JSP标准标签库
查看>>
ceph - adding A monitor (MANUAL)
查看>>
MYSQL的慢查询分析
查看>>
Go系统下的自定义属性文件的增删改查
查看>>
mysql一些比较冷门的查询
查看>>
MapXtreme 2005 学习心得 工具(六)
查看>>
以太坊DAO之时间锁定Multisig
查看>>
我的友情链接
查看>>
java在src/test/resourse下读取properties文件
查看>>
cloud-zoom的例子
查看>>
HTML学习1
查看>>
vmware converter p2v ubuntu 12.04
查看>>
Phantom Korea
查看>>
APUE读书笔记-07进程环境(5)
查看>>