`

使用httpclient4出现ConnectionPoolTimeoutException: Timeout waiting for connection异常

    博客分类:
  • http
阅读更多

背景:今天有个需求是在发布之前检查一下模板中引用的静态资源是否被发布,然后用正则取出被引用的静态资源的url,然后用httpclient去请求,看返回码是否是404,如果是404,则表明这个静态资源是不存在的,即有问题,该模板不能发布。

验证的核心代码如下:

if (urls.size() > 0) {
            HttpClient httpClient = null;
            try {
                httpClient = SimpleHttpsTrustClientTemplate.createHttpClient();
                HttpGet httpGet = new HttpGet();
                HttpResponse response = null;
                for (Iterator<String> iter = urls.iterator(); iter.hasNext();) {
                    httpGet.setURI(URI.create(iter.next()));
                    response = httpClient.execute(httpGet);
                    if (response.getStatusLine().getStatusCode() != HttpStatus.SC_NOT_FOUND) {
                        iter.remove();
                    }
                }
            } catch (Exception e) {
                LOGGER.error(e);
            }
        }

 测试就出现了“ConnectionPoolTimeoutException: Timeout waiting for connection”异常,应该是说连接没有释放,后来查看API,发现没有直接释放连接的方法,后来查了一下httpclient4中文版帮助文档(http://www.docin.com/p-564016244.html),说是要将响应流的内容消耗掉就会关闭连接,于是加了一行response.getEntity().getContent().close();重试,发现问题得以解决。

完整代码如下:

if (urls.size() > 0) {
            HttpClient httpClient = null;
            httpClient = SimpleHttpsTrustClientTemplate.createHttpClient();
            HttpGet httpGet = new HttpGet();
            HttpResponse response = null;
            for (Iterator<String> iter = urls.iterator(); iter.hasNext();) {
                httpGet.setURI(URI.create(iter.next()));
                try {
                    response = httpClient.execute(httpGet);
                    if (response.getStatusLine().getStatusCode() != HttpStatus.SC_NOT_FOUND) {
                        iter.remove();
                    }
                } catch (ClientProtocolException e) {
                    LOGGER.error(e);
                } catch (IOException e) {
                    LOGGER.error(e);
                } finally {
                    try {
                        if (response != null) {
                            response.getEntity().getContent().close();
                        }
                    } catch (IllegalStateException e) {
                        LOGGER.error(e);
                    } catch (IOException e) {
                        LOGGER.error(e);
                    }
                }
            }
        }
 
0
2
分享到:
评论

相关推荐

    HttpClient、乱码解决:实例

    本篇将详细介绍如何使用HttpClient解决乱码问题。 一、HttpClient基本使用 HttpClient主要由以下几个核心组件构成: 1. HttpClient:客户端实例,负责管理连接、配置请求等。 2. HttpRequestBase:表示HTTP请求,如...

    httpclient-4.5.12-API文档-中文版.zip

    赠送jar包:httpclient-4.5.12.jar; 赠送原API文档:httpclient-4.5.12-javadoc.jar; 赠送源代码:httpclient-4.5.12-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.12.pom; 包含翻译后的API文档:...

    android 学习笔记6-HttpClient 多线程下载 断点续传 进度条 源码关联

    1、使用HttpClient发送GET请求: 2、使用HttpClient发送POST请求:和之前的GET类似 3、使用异步HttpClient发送请求,可以在github上找一些别人已经写好的代码,封装度比较高,直接拿来用。 4、多线程下载:使用...

    commons-httpclient-3.1jar包

    《Apache Commons HttpClient 3.1详解》 Apache Commons HttpClient 是一个功能强大的Java库,专为实现客户端HTTP通信而设计。这个3.1版本是HttpClient的一个重要里程碑,它提供了丰富的功能和改进,使得开发者能够...

    commons-httpclient3.1.jar,commons-codec1.3.jar,commons-logging1.1.1.jar

    HttpClient 3.1是该库的一个旧版本,尽管现在已经被更新的HttpClient 4.x系列取代,但在很多老项目中仍然广泛使用。它允许开发者构建复杂的HTTP请求,比如POST、GET、PUT等,并可以处理各种HTTP响应。 2. **Apache ...

    httpclient4

    在本文中,我们将深入探讨HttpClient 4的关键特性、使用方法以及常见应用场景。 1. **基本概念** - **HttpClient**:HttpClient 是一个实现了HTTP协议的客户端编程工具包,支持HTTP/1.0和HTTP/1.1协议,同时具备...

    httpclient4中文API和使用

    首先,`httpclient4中文API.pdf`是HttpClient 4.5的中文版API文档,是学习和使用HttpClient的重要参考资料。这个文档通常会包含HttpClient的类结构、接口、方法等详细信息,以及如何使用这些API来构建HTTP请求的示例...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...

    java使用HttpClient通过url下载文件到本地

    - **创建HttpClient实例**:首先,我们需要创建一个HttpClient对象,例如使用`HttpClientBuilder`或`HttpClients.createDefault()`方法。 - **构建HttpGet请求**:使用`HttpGet`类创建一个HTTP GET请求,指定要...

    Software caused connection abort: recv failed

    4. **异常处理与重试机制**:在代码层面增加异常捕获和处理逻辑,对于“Software caused connection abort: recv failed”异常,可设计重试策略,或者提示用户网络异常,避免程序硬性崩溃。 总之,“Software ...

    httpclient-4.5.13-API文档-中文版.zip

    赠送jar包:httpclient-4.5.13.jar; 赠送原API文档:httpclient-4.5.13-javadoc.jar; 赠送源代码:httpclient-4.5.13-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.13.pom; 包含翻译后的API文档:...

    httpClient请求

    4. **错误处理**:当请求失败时,工具类会提供异常处理逻辑,可能包含重试机制。 5. **线程安全**:为了在多线程环境中安全使用,`HttpClientUtils`需要确保其方法是线程安全的,避免并发问题。 而`RestClient`类...

    一个使用HttpClient调用天气预报接口的例程

    然而,由于这个例程使用了HttpClient,我们需要了解其工作原理和如何在Android环境中正确使用。 7. **注意事项**: - 异步处理:网络请求不应在主线程中进行,以免阻塞用户界面,应使用异步任务或Android的...

    httpClient4 最新帮助文档

    最新帮助文档通常会涵盖HttpClient 4的主要功能、用法、配置、异常处理以及最佳实践。以下是对HttpClient 4的一些关键知识点的详细解释: 1. **基本概念**: - HttpClient:HttpClient是客户端HTTP服务端点的抽象...

    httpclient-4.5.13-API文档-中英对照版.zip

    赠送jar包:httpclient-4.5.13.jar; 赠送原API文档:httpclient-4.5.13-javadoc.jar; 赠送源代码:httpclient-4.5.13-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.13.pom; 包含翻译后的API文档:...

    使用HttpClient实现文件的上传所需lib

    4. **配置HttpClient**:为了优化性能和安全性,我们可能需要配置HttpClient,例如设置连接超时、读取超时,或者使用自定义的`HttpClientBuilder`或`HttpAsyncClientBuilder`。 5. **错误处理**:在实际开发中,...

    使用HttpClient必须的jar包

    在Java项目中使用HttpClient时,为了确保功能的完整性和正确性,通常需要引入一系列的jar包。这些jar包包含了HttpClient的核心组件、依赖库和其他必要的工具,它们共同构成了HttpClient的运行环境。 以下是一些关键...

    httpClient官方文档

    - 异常处理(Exception Handling):涵盖了HttpClient在执行过程中可能出现的异常情况,以及如何处理这些异常。 4. HTTP 传输安全(HTTP Transport Safety) - 幂等方法(Idempotent Methods):讲述了哪些HTTP...

    java.net.SocketException Connection reset 解决方法

    * Connection reset by peer:Connection reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器端之间的连接断开后,导致连接的一端继续发送数据,引发该异常。 实践经验 通过实践经验,我们可以...

Global site tag (gtag.js) - Google Analytics