httpclient是个好东西,之前做过抓取网页,现在用来做多个不同站点信息通信(简单webservice)
具体做法,在客户端模拟表单提交,服务器端跟普通表单处理一样,安全性通过 ip 密码来简单解决。
在实际生产中碰到一个问题,并发提交调用 webservice时候产生死锁问题。
原来是设置问题:
写道
httpclient的多线程处理
使用多线程的主要目的,是为了实现并行的下载。在httpclient运行的过程中,每个http协议的方法,使用一个 HttpConnection实例。由于连接是一种有限的资源,每个连接在某一时刻只能供一个线程和方法使用,所以需要确保在需要时正确地分配连接。 HttpClient采用了一种类似jdbc连接池的方法来管理连接,这个管理工作由 MultiThreadedHttpConnectionManager完成。
MultiThreadedHttpConnectionManager connectionManager =
new MultiThreadedHttpConnectionManager();
HttpClient client = new HttpClient(connectionManager);
此是,client可以在多个线程中被用来执行多个方法。每次调用HttpClient.executeMethod() 方法,都会去链接管理器申请一个连接实例,申请成功这个链接实例被签出(checkout),随之在链接使用完后必须归还管理器。管理器支持两个设置:
maxConnectionsPerHost 每个主机的最大并行链接数,默认为2
maxTotalConnections 客户端总并行链接最大数,默认为20
管理器重新利用链接时,采取早归还者先重用的方式(least recently used approach)。
由于是使用HttpClient的程序而不是HttpClient本身来读取应答包的主体,所以HttpClient无法决定什么时间连接不再使用了,这也就要求在读完应答包的主体后必须手工显式地调用releaseConnection()来释放申请的链接。
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.setMaxConnectionsPerHost(20);
HttpClient client = new HttpClient(connectionManager);
...
// 在某个线程中。
GetMethod get = new GetMethod("http://jakarta.apache.org/");
try {
client.executeMethod(get);
// print response to stdout
System.out.println(get.getResponseBodyAsStream());
} finally {
// be sure the connection is released back to the connection
// manager
get.releaseConnection();
}
分享到:
相关推荐
- **多路复用**:对于 HTTP/2 协议,HttpClient 支持连接多路复用,允许多个请求在同一连接上并行发送。 - **安全性**:支持 SSL/TLS 安全连接,以及多种身份验证机制,如 Basic、Digest、NTLM 和 Kerberos。 4. ...
2. **多线程问题**:在处理大量并发请求时,HttpClient支持多线程模型。封装工具类可能包含对线程池的管理,以高效地执行多个并行请求。这有助于提高整体的请求处理速度,尤其在大数据爬取或批量服务调用时。 3. **...
8. 允许并行请求或高效连接复用,优化性能。 为了使用HttpClient,你需要下载以下组件的库文件: 1. Commons-HTTPClient的主库文件:commons-httpclient-3.1.jar,可以从Apache官方网站获取。 2. Commons-codec库...
- HttpClient 4.5引入了异步API,基于Future和Callback模型,可以并行处理多个请求。 10. **错误处理**: - 错误代码和异常处理:HttpClient会抛出IOException和其他特定的异常,需要捕获并适当地处理。 学习...
8. **错误处理**:HttpClient 4.4对错误处理进行了优化,提供了更丰富的异常类,便于开发者定位和解决网络通信问题。 9. **国际化支持**:HttpClient 4.4支持多种字符集编码,满足了全球化应用的需求。 10. **测试...
- 使用HttpClient获取原始HTML源码,避免Jsoup直接访问网页可能遇到的JavaScript执行问题。 - 将HttpClient获取的HTML内容传递给Jsoup进行解析,提取所需数据。 - 这种方式适合处理包含复杂JavaScript渲染的页面...
4. **httpasyncclient-4.1.4.jar**:HTTPAsyncClient是异步HTTP客户端,它允许多个并发请求并行处理,提高了性能,尤其在需要大量并发请求的场景下。 5. **httpcore-nio-4.4.13.jar**:HTTPCore NIO基于非阻塞I/O...
它提供了灵活的测试配置,如测试套件、测试组、依赖关系、并行执行等,以及丰富的报告功能,使测试过程更加高效。 在"Httpclient+testng接口测试小例子"中,我们将使用以下步骤进行接口测试: 1. **环境准备**:...
这个库特别适合于需要执行大量并行请求或者需要快速响应时间的应用程序。 使用HttpClient 4,开发者可以轻松实现以下功能: 1. 发送GET和POST请求,以及其他HTTP方法(PUT, DELETE等)。 2. 处理重定向和状态码,...
2. 编码解码支持库:commons-codec-1.3.jar,用于处理编码相关的问题。 3. 日志功能组件:可能需要Commons-Logging,以便记录和调试网络通信的详细信息。 将这些库文件添加到项目的类路径后,你可以开始编写HTTP...
HttpClient 还允许并行请求或高效连接复用,提高性能。 为了使用 Commons-HTTPClient,开发者需要下载以下组件: 1. 主要系统库文件:commons-httpclient-3.1.jar,可以从Apache官方网站获取。 2. 其他依赖库文件:...
3. **异步与同步接口**:HttpClient 4.x提供了同步和异步两种执行模型,异步模式适用于处理大量并发请求,提高了系统的并行处理能力。 4. **Cookie管理**:HttpClient 4.x提供了强大的Cookie管理功能,可以处理各种...
7. **错误处理**:HttpClient提供了详细的异常处理机制,便于开发者捕获和处理各种网络问题,如超时、重试策略等。 8. **代理支持**:HttpClient可以轻松配置代理服务器,适应在企业环境中或需要通过代理访问互联网...
Commons-HTTPClient4组件正是为了解决这类问题而生,它提供了更为强大和灵活的功能。 ##### 2.2 JDK中的java.net包存在的局限性 尽管`java.net`包中提供了基本的HTTP访问功能,但对于大多数应用程序来说,这些功能...
此外,HttpClient还支持多线程操作,可以在并发环境中高效处理多个HTTP请求,这对于处理大量并行Web服务调用的系统来说尤其重要。 在具体使用中,"commons-httpclient-3.0-rc2.jar"是该库的核心组件,包含了所有...
HttpMethods类实现Command Pattern,允许并行请求或高效连接复用,使得代码更加结构化和可维护。 8. **源码开放**: HttpClient遵循Apache Software License,源代码完全免费,开发者可以根据需要对其进行修改和...
在实际开发中,HttpClient可以与各种其他库结合使用,如JSON库解析响应数据,或者使用线程池来并行处理多个请求。HttpClient的Command Pattern设计使得它易于扩展和定制,以适应不同项目的需求。由于HttpClient遵循...
然而,HttpClient的使用在早期版本中存在一些问题,如无法立即关闭连接和资源消耗过大。为了解决这些问题,从.NET Core 2.1开始引入了HttpClientFactory,这是一个专门用来管理和创建HttpClient实例的工厂类,它可以...
4. **重试机制**:当请求遇到网络问题或服务器错误时,HttpClient可以自动重试,保证爬虫的健壮性。 5. **支持多协议**:除了基本的HTTP和HTTPS,HttpClient还支持代理服务器、管道连接(HTTP/1.1的Keep-Alive)和...