关于HttpClient的配置

简介:
1、超时
超时的配置很容易忘记。而一旦忘记了,后果可能是一个请求无休止的链接而不释放。占用资源,并且会阻塞后续逻辑。
Httpclient的超时有两种:ConnectionTimeout,和SoTimeout。前者是一个请求在建立连接过程中等待的最长时延;后者是请求建立后等待数据往返的最长时延。
二者的超时时间配置方法是:
HttpConnectionManagerParams managerParams = client
                    .getHttpConnectionManager().getParams();
// 设置连接超时时间(单位毫秒)
managerParams.setConnectionTimeout(10000);
// 设置设置socket超时时间(单位毫秒)
managerParams.setSoTimeout(10000);
当发生超时的时候,二者分别会抛出org.apache.commons.httpclient.ConnectTimeoutException和java.net.SocketTimeoutException。

2.释放连接
这个不太容易忘记,只是释放连接的语句位置会被忽略。
配置语句是:
PostMethod method = new PostMethod(url);
method.releaseConnection();
要注意的是,method.releaseConnection();一定要放在finnaly语句块中,以保证即使发生异常,也会正常释放链接。

3、编码格式
这个就简单啦,就这一句:
method.getParams().setParameter(
                    HttpMethodParams.HTTP_CONTENT_CHARSET, "GBK");
当然,GBK可以换成其它合法的编码格式代码。

4、java.net.SocketException: Too many open files的问题
据说(未验证),HttpClient本身存在远程请求不释放socket的问题。在大量并发的情况下,可能导致linux文件句柄用完, 从而系统报错:java.net.SocketException: Too many open files.
解决这个问题的方法,是对HttpClient增加两个配置:
HttpClient client = new HttpClient();
// 配置1:
client.getParams().setBooleanParameter("http.protocol.expect-continue", false);
// 配置2:

method.addRequestHeader("Connection", "close");



本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/812289,如需转载请自行联系原作者

相关文章
|
5月前
Httpclient使用总结
Httpclient使用总结
36 0
|
JSON 前端开发 Java
HTTP连接客户端,选 HttpClient 还是 OkHttp ?
HTTP连接客户端,选 HttpClient 还是 OkHttp ?
784 0
HTTP连接客户端,选 HttpClient 还是 OkHttp ?
|
运维 监控 负载均衡
HttpClient 你不一定会用
我在凤巢团队独立搭建和运维的一个高流量的推广实况系统,是通过HttpClient 调用大搜的实况服务。最近经常出现Address already in use (Bind failed) 的问题。很明显是一个端口绑定冲突的问题,于是大概排查了一下当前系统的网络连接情况和端口使用情况,
HttpClient 你不一定会用
|
XML JSON Java
再见,HttpClient!再见,Okhttp!
因为业务关系,要和许多不同第三方公司进行对接。这些服务商都提供基于http的api。但是每家公司提供api具体细节差别很大。有的基于RESTFUL规范,有的基于传统的http规范;有的需要在header里放置签名,有的需要SSL的双向认证,有的只需要SSL的单向认证;有的以JSON 方式进行序列化,有的以XML方式进行序列化。类似于这样细节的差别太多了。
396 0
再见,HttpClient!再见,Okhttp!
|
数据安全/隐私保护 数据格式 XML
HttpClient4.X的代理添加实现
HttpClient4.X的代理添加实现http://www.bieryun.com/1630.html [java] 查看纯文本 package  org.yla.test; import  java.
1171 0
|
Java 数据安全/隐私保护