httpClient请求超时的设置以及处理
2014-10-20 13:36
295 查看
设置超时的起因
在我们的httpClient请求,当我们的请求地址错误或者请求无法在正常时间内连接并且得到反馈抑或是我们的服务器正处在关闭维修的状态
,这时,我们发送httpClient请求的客户端会因为线程中一直在等待我们请求的反馈信息而造成进程阻塞。如果这时候我们不做任何处理会造成客户端无反应(在安卓系统中会造成手机应用的崩溃),这时候,我们就需要设置请求httpClient的超时时间来解决这个麻烦。
在我们的httpClient请求类中生命一个变量来做httpClient请求
在我们的get方法中(本文以get请求为例)对我们的请求对象进行设置
这个时候,当我们的请求或者读取超过6秒的时候,我们的httpClient请求会报出ConnectTimeoutException这个异常
这时候,我们需要在我们的请求代码中捕获我们的异常,例:
我们此时只需要在我们调用httpClient请求的地方判断我们的返回信息是否为"connection time out",
如果是,那就证明我们的请求超时了,此时就可以做相应的超时处理了,如安卓app可以调用toast来在手机中显示"您的请求以超时"
在我们的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设置请求超时和读取超时
- HttpClient连接请求超时设置
- andriod xutils设置请求超时时间 以及设置请求结果缓存时间
- 一款简单实用的请求过滤以及session超时处理
- okhttp3+retrofit2进行HTTP请求以及设置请求超时示例
- apache axis 框架处理https请求时超时时间设置问题
- Extjs6关于Ajax和form表单提交以及store请求session超时的处理方法
- 利用okhttp3 给Retrofit2添加统一请求头 以及设置请求超时时间
- Apache HttpClient设置请求超时时间和返回超时时间,以及超时重试
- [置顶] iOS使用AFN设置请求超时时间并做处理
- 利用AFN实时监测网络状态以及设置请求超时时间
- ios AFNetworking https 认证以及请求超时时间设置
- 为android的HttpClient添加请求超时 .并作相应处理
- Struts2 拦截器 及如何获得 servlet 请求对象 以及Struts 基本配置 &&Session 超时设置
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- jQuery 和ExtJS的timeOut超时设置和event事件处理
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- C#中设置Socket连接请求的超时
- ASP.NET页面运行机制以及请求处理流程
- ASP.NET页面运行机制以及请求处理流程