梦铃之境的专栏

个人技术blog展示

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

设置超时的起因

在我们的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来在手机中显示"您的请求以超时"




阅读更多
个人分类: 安卓
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭