转自:http://www.cnblogs.com/chuhanlong/p/5312166.html
HttpClient在使用中有两个超时时间,是一直接触和使用的,由于上次工作中使用httpClient造成了系统悲剧的情况,特地对它的两个超时时间进行了小小的测试,在这里记录下。

 测试版本为HttpClient——3.1一:连接超时:connectionTimeout1:指的是连接一个url的连接等待时间。2:设置方法为:public class TestHttpClientMain {

/**
* @param args
*/
public static void main(String[] args) {
HttpClient client = new HttpClient();

HttpMethod method = new GetMethod(
“http://test.com“);
client.getHttpConnectionManager().getParams()
.setConnectionTimeout(3000);
client.getHttpConnectionManager().getParams().setSoTimeout(3000);
try {
int statusCode = client.executeMethod(method);
System.out.println(statusCode);

byte[] responseBody = null;

responseBody = method.getResponseBody();

String result = new String(responseBody);

System.out.println(result);

} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

 3:测试的时候,将url改为一个不存在的url:“http://test.com”4:超时时间3000ms过后,系统报出异常。org.apache.commons.httpclient.ConnectTimeoutException: The host did not accept the connection within timeout of 3000 ms

at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:155)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)

 二:读取数据超时:soTimeout1:指的是连接上一个url,获取response的返回等待时间2:设置方法public class TestHttpClientMain {

/**
* @param args
*/
public static void main(String[] args) {
HttpClient client = new HttpClient();

HttpMethod method = new GetMethod(
“http://localhost:8080/firstTest.htm?method=test“);
client.getHttpConnectionManager().getParams()
.setConnectionTimeout(3000);
client.getHttpConnectionManager().getParams().setSoTimeout(2000);
try {
int statusCode = client.executeMethod(method);
System.out.println(statusCode);

byte[] responseBody = null;

responseBody = method.getResponseBody();

String result = new String(responseBody);

System.out.println(result);

} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

 3:测试的时候的连接url为我本地开启的一个url,http://localhost:8080/firstTest.htm?method=test在我这个测试url里,当访问到这个链接时,线程sleep一段时间,来模拟返回response超时。@RequestMapping(params = "method=test") //<——②public String testMethod(ModelMap model) {

try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(“call testMethod method.”);
model.addAttribute(“name”, “test method”);
return “test”;
}

 4:将读取response返回超时时间设的时间比那个sleep时间短之后,运行程序给出异常:java.net.SocketTimeoutException: Read timed out

at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)

HttpClient 4 和 HttpClient 3 设置超时

HttpClient 4:

连接超时:

httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,60000);
// 或者
HttpConnectionParams.setConnectionTimeout(params,6000);
读取超时:

httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,60000);
// 或者
HttpConnectionParams.setSoTimeout(params,60000);
HttpClient 3:

连接超时:

httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
读取超时:

httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);

 ok,以后再写httpClient这两个超时时间一定要加上,不加就很可能悲剧的了

HttpClient超时时间 timeout相关推荐

  1. httpClient 超时时间设置

    上周乐视网cms香港接口,数据刷新缓慢.香港运营人员一直在群里反馈tv端内容不更新. 我观察了下服务器,发现请求接口耗时很久500-6000ms.之前一般都是100ms左右. 导致很多线程一直在wai ...

  2. golang mysql 超时_golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

  3. httpwebrequest超时时间timeout设置无效_【SpringBoot WEB 系列】RestTemplate 之超时设置...

    [SpringBoot WEB 系列]RestTemplate 之超时设置 一般来讲我们访问外部资源时,需要做一个保护,比如最常见的添加一个超时设置,避免一直被阻塞,RestTemplate 可以通过 ...

  4. 如何修改Cypress 测试代码中默认的超时时间(timeout)

    我使用 Cypress 对 SAP 官网进行自动化操作时,遇到了如下的错误消息: Timed out after waiting 60000ms for your remote page to loa ...

  5. 妙用Spring的事务超时时间timeout

    1.如何设置Spring事务超时时间 在方法上加注解 @Transactional(rollbackFor= Exception.class,timeout=10) 注:timeout 单位:秒 增加 ...

  6. golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

  7. Zuul、Ribbon、Feign、Hystrix使用时的超时时间(timeout)设置问题

    本文转载自:https://priesttomb.github.io/,谢谢作者的分享 文章目录 写在前面 注意! 工具 Feign + Hystrix 0. 默认基本配置 1. 不同实例分别配置 R ...

  8. 如何在并发中给 HttpClient 设置不同的超时时间?

    咨询区 boot4life 为了能够复用 HttpClient 所打开的TCP链接,我不得不让所有的request共享一个单例,但问题来了,如果我简单的在每一次request之前修改 timeout ...

  9. httpclient: 设置请求的超时时间,连接超时时间等

    1.为什么要设置HTTP timeout? 1.与用户操作相关的接口,如果不设置超时时间,将会出现长时间的无响应,严重影响用户体验. 2.负载很高的系统,因为大量调用耗时长的接口,导致性能急剧下降,从 ...

  10. HttpClient 如何设置超时时间

    今天分享一个巨坑,就是 HttpClient.这玩意有多坑呢?就是每个版本都变,近日笔者深受其害. 先看一下代码,我要发送请求调用一个c++接口. public static String doPos ...

最新文章

  1. VC解析XML--使用CMarkup类解析XML
  2. 应对全球粮食危机 AI、5G与机器视觉联手“养鱼”
  3. SQL Server中截取字符串常用函数
  4. spark RDD详解及源码分析
  5. 机器学习笔记(十四):异常检测
  6. Java—switch case实现两个数的算术运算
  7. 学习笔记之51单片机键盘篇(非编码键盘与编码键盘、非编码键盘的扫描方式、独立键盘、矩阵键盘)
  8. C++新手入门学习笔记(跟着敲)
  9. Composite UI Application Block(Cab)比较详细的一片文章
  10. 还债之期末复习(预习)
  11. 分析和比较ABAQUS、MARC、Adina、ANSYS三种CAE软件
  12. 手工查杀威金病毒,完全恢复exe程序
  13. java.lang.UnsupportedOperationException: Required method instantiateItem was not overridden
  14. java水仙花数编程_水仙花数java编程实现
  15. Horner法则(秦九韶算法 )的程序实现
  16. 华为“吐出”的高端市场,小米 Ov 却吃不下
  17. 微信公众平台iPhone版内测开始了
  18. Centos7.5之Linux系统安装
  19. 坐在家中点击鼠标,万里之外ATM吐钞……
  20. 【渝粤教育】广东开放大学 数据库应用 形成性考核 (26)

热门文章

  1. python填充三角形颜色_python的pillow用ImageDraw.Draw.polygon如何填充半透明的颜色
  2. AI只调整填充色的透明度
  3. ERROR: Cannot uninstall ‘xxx‘. It is a distutils installed project and thus we cannot accurately
  4. github仓库在线新建文件夹方法备份
  5. python定义一个函数实现整数的幂运算_Leetcode练习(Python):第326题:3的幂:给定一个整数,写一个函数来判断它是否是 3 的幂次方。...
  6. 关于MD5码的一些自我总结
  7. 数据库中自然连接与内连接的区别
  8. 用于科学计算机的计算器特点是什么意思,科学计算器在线e
  9. 《我想吃掉你的胰脏》观后感
  10. 使用 spring.profiles.active 及 @profile 注解 动态化配置内部及外部配置