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超时设置

DefaultHttpClient:请求超时httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 6...

httpClient中的三种超时设置

在Apache的HttpClient包中,有三个设置超时的地方: (1)/* 从连接池中取连接的超时时间*/  ConnManagerParams.setTimeout(params, 100...
  • zh521zh
  • zh521zh
  • 2016年07月22日 13:50
  • 4083

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

HttpClient  4.5版本设置连接超时时间-CloseableHttpClient设置Timeout(区别于4.3.2)   HttpClient升级到4.5版本后,API有很多变...

Java中httpClient中的三种超时设置小结(转)

在Apache的HttpClient包中,有三个设置超时的地方:/* 从连接池中取连接的超时时间*/ ConnManagerParams.setTimeout(params, 1000); /*连...

HttpClient 中的三个超时详解

1.HttpClient内部三个超时时间的区别 HttpClient内部有三个超时时间设置:连接池获取可用连接超时,连接超时,读取数据超时 先看以下HttpClient的初始化代码: Reque...

HttpClient连接超时及读取超时

HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间; HttpClient连接时间 所谓...

HttpClient的请求超时和响应超时

HttpClient是apache的开源实现,Android SDK中集成了HttpClient,项目开发中目前使用HttpClient来请求网络数据。在开发中碰到下面两个参数。 CONNECTIO...

HttpClient 超时相关参数设置

这里主要介绍HttpClient 4.5版本(区别于HttpClient 4.3 版本,参数又说不同)设置连接超时时间CloseableHttpClient。...

httpclient4.3 线程池超时问题解决

之前采用Httpclient4.3写了一个抓取服务,突然有一天线上出现了很多这样的报警Read time out 和 ConnectionPoolTimeoutException: Timeout w...

HttpClient超时故障

东东 页面无法打开,堆栈信息如下: Name: trhead-142 State: WAITING onorg.apache.commons.httpclient.MultiThreadedHttp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:httpClient请求超时的设置以及处理
举报原因:
原因补充:

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