Release Connection in Apache HttpComponents

原文:http://blog.blacklee.net/tech/707-release-connection-in-apache-httpcomponents

自从HttpClient升级到HttpComponent后,HttpMethod提供的方法releaseConnection()就被丢弃了。
转而改成另外相对麻烦点的维护一个连接池的处理方式。

When you replace Apache Commons HttpClient with Apache HttpComponents .
if you haven’t release connection in your codes, you may found exception traces like:

 

java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
         at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:199)
         at org.apache.http.impl.conn.SingleClientConnManager$1.getConnection(SingleClientConnManager.java:173)
         at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:390)
         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)


But HttpComponents doesn’t provide method like void org.apache.commons.httpclient.HttpMethod.releaseConnection() .

It provides another method to do this work. And it’s more complex then before. Sample codes I wrote below:

 

public class Test {
    public static void main(String[] args) throws Exception {
        System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
        System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "debug");
        System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
        System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
        System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "debug");
 
        HttpParams httpParams = new BasicHttpParams();
        httpParams.setIntParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 20);
        SchemeRegistry schreg = new SchemeRegistry();
        schreg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        schreg.register(new Scheme("https", PlainSocketFactory.getSocketFactory(), 443));
        ThreadSafeClientConnManager connManager = new ThreadSafeClientConnManager(httpParams, schreg);
//        connManager.setMaxTotal(20);
 
        DefaultHttpClient client = new DefaultHttpClient(connManager, httpParams);
        String url = "http://www.google.com/";
        HttpGet get = new HttpGet(url);
        sendRequest(get, client);
        System.out.println("------------------2------------------");
        sendRequest(get, client);
        System.out.println("------------------3------------------");
        sendRequest(get, client);
        System.out.println("------------------4------------------");
        sendRequest(get, client);
        System.out.println("------------------5------------------");
        sendRequest(get, client);
    }
 
    private static void sendRequest(HttpGet get, DefaultHttpClient client) throws InterruptedException {
        HttpResponse resp = null;
        try {
            resp = client.execute(get);
            // get response content here
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                resp.getEntity().getContent().close(); //!!!IMPORTANT
            } catch (Exception e) {
                // go to hell
            }
        }
    }
}
 

Here are some notes:

  1. HC4.1 may deprecated some methods/properties.
  2. DON’T FORGET TO CLOSE THE RESPONSE STREAM


不用Root也能抓包?Android高版本HTTPS抓包的3种替代方案(含Charles技巧) 本文针对Android高版本HTTPS抓包难题,提供了三种无需Root权限的实战解决方案:利用VirtualXposed等虚拟沙盒环境、配置Postern等系统级代理工具,以及通过修改应用源码或网络安全配置。文章还详细解析了Charles抓包工具在非Root环境下的高级配置与排错技巧,帮助开发者在遵守安全规范的前提下,有效进行网络调试与监控。 阅读详情

相关推荐

IAR for ARM 搭建STM32F103C8T6工程模板(实战指南)

本文详细介绍了如何在IAR for ARM开发环境中为STM32F103C8T6微控制器搭建完整的工程模板。从环境准备、固件库获取、目录结构设计到工程配置与编译调试,提供了实战指南和常见问题解决方案,帮助开发者快速建立稳定的STM32开发环境。

fun88的博客 988

httpclient报错:Invalid use of BasicClientConnManager: connection still allocated. Make sure to release

Invalid use of BasicClientConnManager: connection still allocated. Make sure to release the connection before allocating another one

baidu_38008726的博客 1546

stm32入门 点亮TFTLCD(NT35510驱动)

正点原子stm32f407探索者开发板屏幕使用正点原子4.3寸TFTLCDstm32f407开发使用标准库本文参考正点原子例程和NT35510的data sheet,尽量使用最少的代码点亮屏幕。

tangliang_cn的博客 1981

httpclient释放资源 Make sure to release the connection before allocating another one.

自从HttpClient升级到HttpComponent后,HttpMethod提供的方法releaseConnection()就被丢弃了。 转而改成另外相对麻烦点的维护一个连接池的处理方式。 httpResponse resp = null; resp.getEntity().getContent().close(); ...

ccnn_yanan的博客 1346

以太网硬件核心:MAC、PHY、MII与交换机原理与实战排查

计算机网络通信的基础依赖于一套完整的硬件协议栈。在OSI模型中,数据链路层和物理层是实现设备间可靠、高效数据传输的基石。其核心原理在于将上层数据包封装成帧,并通过特定的介质访问控制与物理信号转换机制进行传输。这一过程的技术价值在于为上层应用提供了透明、稳定的通信信道,是互联网和所有局域网通信的物理承载。在嵌入式系统、网络设备开发及运维等应用场景中,深入理解底层硬件交互至关重要。本文将聚焦于以太网硬件的两大核心组件:负责逻辑成帧与流量控制的MAC控制器,以及负责数模转换与链路协商的PHY芯片。它们通过MII、

dgqvhtlwq472235338的博客 423

Vue2 - 最新详细实现接入天地图详细配置流程及示例代码教程,提供获取用户当前定位的城市名称及省市区数据、精准经纬度信息、IP属地定位、地图搜索标点等示例,解决天地图跨域报错/页面白屏/定位不准问题

vue2,nuxt2,天地图,使用教程,vue接入国家天地图,定位api,ip属地定位,获取用户当前位置数据,省市区,地图不显示,白屏,报错,vue2如何使用天地图,地图选点,cors跨域,白名单设置了还是不行,vue项目调用天地图api实现定位,Vue2中使用天地图,详细教程,天地图申请密钥key教程,经纬度,经纬度不准确,一直定位北京,定位在北京不准怎么办,nuxt项目天地图,网站,网页,h5页面,地图显示不全,获取当前定位,如何使用天地图,拿到客户ip地址定位城市名称,距离计算,实时搜索地址逆解析,天

🏆 前端领域优质创作者 5326

java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.

java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.Make sure to release the connection before allocating another one. java.lang.IllegalStateExceptio...

weixin_30950887的博客 1153

2026最新openclaw(clawbot/moltbot)真正在自己个人电脑上搭建部署,配置飞书远程远程让AI助理操控电脑完成任务,以及结合ollama无限token实现7*24小时工作(附配置)

2026最新openclaw(clawbot/moltbot)真正在自己个人电脑上搭建部署,配置飞书远程远程让AI助理操控电脑完成任务,以及结合 ollama 无限token实现7*24小时工作,以及部署安装需要的 skills 完成复杂的工作任务(附完整可以运行的配置文件)。 很多人已经会配置安装 openclaw 了 ,但是 安装完成之后真正让电脑自动运行起来的很好,完成出色工作的更少,最常见的就是聊聊天,或者执行一些简单的命令,理解要让电脑自动化工作,openclaw、skills、大模型这三样。

代码讲故事 2962

HttpClient:connection still allocated.解决方法

org.apache.http.client.HttpClient使用中,报了以下的异常: Invalid use of SingleClientConnManager: connection still allocated. Make sure to release the connection before allocating another one. 此问题出现原因是并发调用同一个h

逆流的鱼的专栏 9688

在Simulink中实现基于深度强化学习的控制算法仿真建模

通过上述步骤,你可以在Simulink中实现基于深度强化学习的控制算法仿真建模。这种方法适用于许多复杂的控制问题,尤其是当传统控制方法难以找到有效解决方案时。随着经验的积累,你可以进一步探索不同的深度强化学习算法及其变种,以适应更广泛的应用场景。此外,还可以结合其他先进技术(如迁移学习、多智能体协作等),提升模型的表现能力。

amy_mhd的博客 414

【通信原理】基于【MATLAB】的通信OFDM系统仿真

主要进行OFDM系统的仿真,使用MATLAB软件对OFDM系统的接收端和发射端分别进行模拟仿真。

ALi.S的博客 5791

httpClient发送请求提示java.lang.IllegalStateException: Invalid use of BasicClientConnManager

java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated. java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated. ...

ningmengbu_suan的博客 1455

串口通信协议

文章目录前言一、串口通信结构图二、电平三、串口通信协议 前言 本文记录的是平时常用的串口通信有关知识点 提示:以下是本篇文章正文内容,下面案例可供参考 一、串口通信结构图 1、RS232标准串口通讯结构图 2、USB转串口通讯结构图 3、原生的串口到串口 二、电平 串口通信的时候,有三种电平:TTL电平、RS232电平、USB电平 TTL电平是从MCU直接出来的电平 RS323是一种通讯标准,因为高电平+15V低电平–15V电位差30V容错空间大,抗干扰能力强,一般用于工业设备直接通信电平转换芯

weixin_43772611的博客 6849

Make sure to release the connection before allocating another one

自从HttpClient升级到HttpComponent后,HttpMethod提供的方法releaseConnection()就被丢弃了。转而改成另外相对麻烦点的维护一个连接池的处理方式。 When you replace Apache Commons HttpClient with Apache HttpComponents.if you haven’t release connect...

1060

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java网络爬虫实战:从环境搭建到多线程采集

网络爬虫本质上是自动化获取网页数据的过程,其核心链路包括HTTP请求发送、HTML内容解析、数据清洗存储以及并发调度。在技术选型上,Java凭借成熟的HttpClient、Jsoup等生态组件,能够稳定高效地支撑中小规模的定点数据采集任务,并天然适配Spring Boot等常见后端工程体系。理解爬虫涉及的线程池、队列、字符串处理等基础知识,有助于构建健壮的采集服务。这类技术常用于商品信息监控、市场数据分析、接口数据聚合等场景。本文以Java为例,完整讲解爬虫项目的环境准备、模块设计与实现,并梳理多线程采集、

weixin_33911824的博客 168

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java线程httpclient_java – 多线程httpClient

public class test {public static final int nThreads = 2;public static void main(String[] args) throws ExecutionException, InterruptedException{// Runnable myrunnable = new myRunnable();ExecutorServic...

weixin_30780735的博客 474

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Invalid use of SingleClientConnManager: connection still allocated. 解决方法

在多线程环境下,使用 httpclient.xxx.jar包的 new DefaultHttpClient() ; 构造函数创建的client客户端将会引发以下这个错误: Invalid use of SingleClientConnManager: connection still allocated. Make sure to release the connection before a...

ThomasKwan的博客 995

调用rest地址时异常:Invalid use of BasicClientConnManager: connection still allocated.

Caused by: java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.  Make sure to release the connection before allocating another one. 使用Resteasy进行restful

earthhour的专栏 7324

HttpClient release connection 该放手的时候必须放手

Apache commons 系列的HttpClient 相信大家都用过,选择它而非JDK 的java.net.HttpURLConnection ,是为了使用HttpClient 封装的几个实用的功能。 目前使用最多的版本还是httpclient-3.x ,在官网http://hc.apache.org/httpclient-3.x/tutorial.html 有这么一段示例代码: impo

wujun8的专栏 3万+

apache的HttpClient使用总结

目录 1.前言 2.Apache官网例子 3.HttpClient及其连接池配置 4.MaxtTotal和DefaultMaxPerRoute的区别 5.HttpClient连接池模型 6.HttpClient从连接池中获取连接源码分析 7.HttpClient从连接池中获取连接流程图 8.连接重用和保持策略 8.1.HttpClientBuilder创建MainClientExec 8.2.ConnectionReuseStrategy(连接重用策略) 8.3.MainCl...

wujun2412的博客 3767

httpclient连接池的使用

httpclient是java开发中非常常见的一种访问网络资源的方式了,本位主要说明多线程环境下HttpClient连接池的使用。 虽说http协议时无连接的,但毕竟是基于tcp的,底层还是需要和服务器建立连接的。对于需要从同一个站点抓取大量网页的程序,应该使用连接池,否则每次抓取都和Web站点建立连接、发送请求、获得响应、释放连接,一方面效率不高,另一方面稍不小心就会疏忽了某些资源的释放、导致

一名系统架构师的征途 2386

HttpClient的使用与连接资源释放

文章目录HttpClient一、请求类型二、使用依赖三、参考文档四、使用4.1 获取`httpClient`4.2 相关配置4.2.1 HttpClientConnectionManager4.2.2 RequestConfig4.3 使用示例:GET五、问题探讨5.1 关闭5.2 不关闭5.3 response问题:消费不彻底问题:消费彻底问题:关闭资源5.4 httpClient5.4.1 httpClient.close5.4.2 如何高效获取和使用httpClient1. 使用时生成2.连接池获取3

qq_43429919的博客 9948

Invalid use of SingleClientConnManager: connection still allocatedMake sure to release the connectio

意思是多线程同时调用一个client 解决办法:synchronized (HTTPCLIENT) { HttpResponse response = HTTPCLIENT.execute(httpPost); HttpEntity entity = response.getEntity(); is

xiaohu415033622的专栏 1725

Invalid use of SingleClientConnManager: connection still allocated解决方案

一:Invalid use of SingleClientConnManager: connection still allocated  此问题出现原因是使用同一个httpclient当 前一个post|get请求尚未结束,另条线程又再次使用该httpclient请求数据,则前一个会报出如上错误  出现原因 1.  2:post/get没有关闭,没有写post.abort

努力后才会有收获....加油! 2199

Invalid use of BasicClientConnManager: connection still allocated.

ava.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated. Make sure to release the connection before allocating another one. at org.apache.http.util.Asserts.c

Black Monkey 6885

各种恶心の异常

Java代码 收藏代码 java.lang.StackOverflowError at java.util.regex.PatternGroupTail.match(Pattern.java:4102)atjava.util.regex.PatternGroupTail.match(Pattern.java:4102)atjava.util.regex.PatternGr...

oboth_LJL的博客 389
上一篇: 微博短链接的生成算法(Java版本)
下一篇: Spring中Quartz的配置
ghost_fly
博客等级 码龄20年 5粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值