HttpClient在使用中有两个超时时间,是一直接触和使用的,由于上次工作中使用httpClient造成了系统悲剧的情况,特地对它的两个超时时间进行了小小的测试,在这里记录下。
测试版本为HttpClient——3.1
一:连接超时:connectionTimeout
1:指的是连接一个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)
二:读取数据超时:soTimeout
1:指的是连接上一个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)
相关推荐
常见的联网请求方式有两种:HttpURLConnection和HttpClient。下面将详细讲解这两种方法,以及它们如何处理POST和GET请求。 **HttpURLConnection** HttpURLConnection是Java标准库提供的类,自Android 2.3(API级别9...
5. **异步和同步模式**:HttpClient提供同步和异步两种操作模式,适应不同场景的需求。 提到code.jar包,这通常是指包含代码实现的库文件,可能包含了HttpClient的额外功能或者特定项目中的自定义代码。在某些情况...
4. **性能优化**:合理配置连接池大小、超时时间、重试策略等参数,可以显著提升HttpClient的性能。 5. **线程安全**:HttpClient实例不是线程安全的,如果在多线程环境中使用,需要为每个线程创建独立的HttpClient...
HTTPClient组件是Apache Jakarta Commons项目中的一个子项目,专为Java开发者提供高效、全面的HTTP协议...同时,HttpClient还提供了丰富的配置选项,如设置超时时间、连接管理策略等,以适应不同场景下的网络通信需求。
2. **连接管理**:HttpClient提供了一种灵活的连接管理机制,可以控制连接池的大小,避免过多的TCP连接创建和销毁,从而提高性能。 3. **线程安全**:HttpClient设计为线程安全,可以在多线程环境中使用,而无需...
2. **HttpParams**:这是一个参数容器,用来设置HttpClient的行为,如超时时间、连接池大小等。可以通过`client.getParams().setParameter(paramName, paramValue);`进行设置。 3. **HttpRequestBase**:它是所有...
HttpClient提供了异步和同步两种模式来发送GET、POST和其他HTTP方法的请求。它支持多种HTTP特性,如Cookie管理、自动重定向、身份验证机制(如NTLM和Kerberos)、连接管理和超时设置。此外,它还提供了对HTTPS的支持...
它支持HTTP/1.1协议,并提供了异步和同步两种执行模式。 2. **HttpClientUtil 类**:通常,开发者会创建一个辅助类 HttpClientUtil,封装 HttpClient 的常用操作,如构建HttpGet、HttpPost对象,设置请求头,处理...
HttpClient库提供了丰富的API来处理这两种请求类型,允许设置请求头、携带参数、处理响应等。例如,你可以使用`HttpGet`和`HttpPost`类创建请求对象,通过`NameValuePair`或`HttpEntity`添加请求参数,使用`...
1. **异步和同步API**: HttpClient 提供了同步和异步两种API,以适应不同的应用场景。同步API适合于简单且线性的工作流,而异步API则适用于处理大量并发请求,提高了系统性能。 2. **全面的HTTP协议支持**: ...
通过`HttpClient`实例,我们可以设置连接超时、重试策略等网络连接参数。 2. `HttpGet`与`HttpPost`:这两个类分别代表HTTP的GET和POST请求。`HttpGet`用于获取服务器资源,而`HttpPost`则用于向服务器发送数据。 ...
封装工具类通常会提供方便的方法来发起这两种请求,比如`sendGetRequest(String url, Map, String> params)`和`sendPostRequest(String url, Map, String> params)`。这些方法会处理URL编码、参数拼接、Header设置等...
2. **异步和同步API**:HttpClient 提供了同步和异步两种 API,满足不同场景的需求,异步 API 可以显著提高性能,尤其是在处理大量并发请求时。 3. **连接管理**:HttpClient 内置了连接池,可以有效地管理 TCP ...
在Android应用开发中,进行网络通信是常见的任务,其中两种主要的请求方式是使用`HttpURLConnection`和`HttpClient`。虽然两者都能实现HTTP通信,但它们在功能、使用方式和性能上存在一些区别。 首先,Apache ...
HttpClientUtil可能需要配置连接池的大小、超时时间等参数,以适应不同的应用场景。 综上所述,HttpClientUtil工具类在IT应用中扮演着关键角色,简化了HTTP和HTTPS请求的实现,特别是发送文件这样的复杂操作。通过...
4. **HttpClientBuilder**: 这是一个配置工具,通过链式方法可以方便地设置HttpClient的各种参数,如超时时间、重试策略、连接池大小等。 5. **HttpClientContext**: 提供上下文信息,存储与特定请求或会话相关的...
在分布式系统中,这两种技术常常结合使用,以实现各个节点间的高效数据交互。 **HTTPClient简介** HTTPClient是Apache HttpClient项目提供的一个Java库,它允许开发者发送HTTP请求并接收响应。这个库提供了丰富的...
1. 创建HttpClient实例,配置连接参数(如超时时间、重试策略等)。 2. 构建HttpGet或HttpPost对象,设置请求URL。 3. 使用HttpClient执行请求,并获取HttpResponse。 4. 从HttpResponse中获取HttpEntity,然后读取...
1. **HTTP协议基础**:了解HTTP的基本概念,包括GET和POST两种主要的请求方法。GET用于获取资源,参数通过URL传递;POST用于提交数据,数据包含在请求体中。 2. **类与对象**:`HttpClient` 是一个面向对象的PHP类...