httpClient请求超时的设置以及处理

原创 2014年10月20日 13:36:04

设置超时的起因

在我们的httpClient请求,当我们的请求地址错误或者请求无法在正常时间内连接并且得到反馈抑或是我们的服务器正处在关闭维修的状态

,这时,我们发送httpClient请求的客户端会因为线程中一直在等待我们请求的反馈信息而造成进程阻塞。如果这时候我们不做任何处理会造成客户端无反应(在安卓系统中会造成手机应用的崩溃),这时候,我们就需要设置请求httpClient的超时时间来解决这个麻烦。


在我们的httpClient请求类中生命一个变量来做httpClient请求

<span style="font-size:14px;"> HttpClient httpClient = new DefaultHttpClient();</span>


在我们的get方法中(本文以get请求为例)对我们的请求对象进行设置

<span style="white-space:pre">	</span>// 请求超时(6秒)
        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 6000);
        // 读取超时<span style="font-family: Arial, Helvetica, sans-serif;">(6秒)</span>
        httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 6000);

这个时候,当我们的请求或者读取超过6秒的时候,我们的httpClient请求会报出ConnectTimeoutException这个异常

这时候,我们需要在我们的请求代码中捕获我们的异常,例:

<span style="white-space:pre">	</span>try{
            // 创建HttpGet对象。
            HttpGet get = new HttpGet(urlAddress);
            System.out.println(urlAddress+"============");
            // 发送GET请求
            HttpResponse httpResponse = httpClient.execute(get);
            // 如果服务器成功地返回响应
            if (httpResponse.getStatusLine()
                    .getStatusCode() == HttpStatus.SC_OK)
            {
                // 获取服务器响应字符串
                String result = EntityUtils.toString(httpResponse.getEntity());
                return result;
            }
            else {
                // 如果服务器失败返回响应数据"error"
                return "error";
            }
        }catch(ConnectTimeoutException e){
            // 捕获超时异常 并反馈给调用者
            e.printStackTrace();
            return "connection time out";
        }finally{
            // 关闭HttpClient
            httpClient.getConnectionManager().shutdown();
        }
当我的请求超时的时候,我的该请求类会捕获这个异常,并且返回"connection time out"这个字符串

我们此时只需要在我们调用httpClient请求的地方判断我们的返回信息是否为"connection time out",

如果是,那就证明我们的请求超时了,此时就可以做相应的超时处理了,如安卓app可以调用toast来在手机中显示"您的请求以超时"




HttpClient超时机制(安全问题处理:访问超大文件控制)

本文转载自:https://yq.aliyun.com/articles/14703 摘要: 背景      最近一直在做项目,其中的一个功能点,主要是访问外部网站并获取页面的字符串,具体的...
  • chivalrousli
  • chivalrousli
  • 2016年12月05日 16:08
  • 2241

HttpClient 中的三个超时详解

1.HttpClient内部三个超时时间的区别 HttpClient内部有三个超时时间设置:连接池获取可用连接超时,连接超时,读取数据超时 先看以下HttpClient的初始化代码: Reque...
  • zhongzh86
  • zhongzh86
  • 2015年06月03日 17:31
  • 32440

HttpClient超时设置

DefaultHttpClient:请求超时httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 6...
  • iris0123456
  • iris0123456
  • 2011年06月10日 10:27
  • 60361

HttpClient超时设置详解

HttpClient 4.3。HttpClient这货和Lucene一样,每个版本的API都变化很大,这有点让人头疼。就好比创建一个HttpClient对象吧,每一个版本的都不一样, 3.X是这样的...
  • u011191463
  • u011191463
  • 2017年11月29日 14:22
  • 1795

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

HttpClient  4.5版本设置连接超时时间-CloseableHttpClient设置Timeout(区别于4.3.2)   HttpClient升级到4.5版本后,API有很多变...
  • h254532699
  • h254532699
  • 2017年01月11日 13:09
  • 16590

Apache HttpClient 没有设置time out导致应用长时间阻塞的问题

现在的对外接口一般都是Http + json的,因为简单,语言无关。 Apache HttpClient应该是最常用的Java http组件了。这货有个坑爹的地方,Apache HttpClient如...
  • hengyunabc
  • hengyunabc
  • 2014年04月21日 19:46
  • 17809

HttpClient的超时用法小记

HttpClient在使用中有两个超时时间,是一直接触和使用的,由于上次工作中使用httpClient造成了系统悲剧的情况,特地对它的两个超时时间进行了小小的测试,在这里记录下。 测试版本为HttpC...
  • wwwxxdddx
  • wwwxxdddx
  • 2016年04月07日 17:46
  • 679

HttpClient代理IP及设置连接读取超时

1、不废话,上代码: public static void main(String[] args) throws Exception { CloseableHttpClient httpClien...
  • ryelqy
  • ryelqy
  • 2017年07月18日 22:24
  • 1070

HttpClient的请求超时和响应超时

HttpClient是apache的开源实现,Android SDK中集成了HttpClient,项目开发中目前使用HttpClient来请求网络数据。在开发中碰到下面两个参数。 CONNECTIO...
  • goodlixueyong
  • goodlixueyong
  • 2016年02月16日 21:03
  • 5109

Python-HttpClient开发常见问题与解决

重定向 JSON unicode编码 URL地址含有中文
  • ccy0815ccy
  • ccy0815ccy
  • 2015年01月06日 15:44
  • 3271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:httpClient请求超时的设置以及处理
举报原因:
原因补充:

(最多只允许输入30个字)