`
wanxiaotao12
  • 浏览: 476644 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HttpClient的两种超时时间「转」

 
阅读更多

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)

 

 

 

 

 

 

分享到:
评论

相关推荐

    android 联网请求的两种方式HttpURLConnection和HttpClient

    常见的联网请求方式有两种:HttpURLConnection和HttpClient。下面将详细讲解这两种方法,以及它们如何处理POST和GET请求。 **HttpURLConnection** HttpURLConnection是Java标准库提供的类,自Android 2.3(API级别9...

    httpclient.jar包下载

    5. **异步和同步模式**:HttpClient提供同步和异步两种操作模式,适应不同场景的需求。 提到code.jar包,这通常是指包含代码实现的库文件,可能包含了HttpClient的额外功能或者特定项目中的自定义代码。在某些情况...

    Httpclient依赖包

    4. **性能优化**:合理配置连接池大小、超时时间、重试策略等参数,可以显著提升HttpClient的性能。 5. **线程安全**:HttpClient实例不是线程安全的,如果在多线程环境中使用,需要为每个线程创建独立的HttpClient...

    HTTPClient组件的应用

    HTTPClient组件是Apache Jakarta Commons项目中的一个子项目,专为Java开发者提供高效、全面的HTTP协议...同时,HttpClient还提供了丰富的配置选项,如设置超时时间、连接管理策略等,以适应不同场景下的网络通信需求。

    HttpClient4.1.2中英文文档

    2. **连接管理**:HttpClient提供了一种灵活的连接管理机制,可以控制连接池的大小,避免过多的TCP连接创建和销毁,从而提高性能。 3. **线程安全**:HttpClient设计为线程安全,可以在多线程环境中使用,而无需...

    Android HttpClient工具类

    2. **HttpParams**:这是一个参数容器,用来设置HttpClient的行为,如超时时间、连接池大小等。可以通过`client.getParams().setParameter(paramName, paramValue);`进行设置。 3. **HttpRequestBase**:它是所有...

    commons-httpclient相关jar包

    HttpClient提供了异步和同步两种模式来发送GET、POST和其他HTTP方法的请求。它支持多种HTTP特性,如Cookie管理、自动重定向、身份验证机制(如NTLM和Kerberos)、连接管理和超时设置。此外,它还提供了对HTTPS的支持...

    httpclientutil

    它支持HTTP/1.1协议,并提供了异步和同步两种执行模式。 2. **HttpClientUtil 类**:通常,开发者会创建一个辅助类 HttpClientUtil,封装 HttpClient 的常用操作,如构建HttpGet、HttpPost对象,设置请求头,处理...

    httpClient

    HttpClient库提供了丰富的API来处理这两种请求类型,允许设置请求头、携带参数、处理响应等。例如,你可以使用`HttpGet`和`HttpPost`类创建请求对象,通过`NameValuePair`或`HttpEntity`添加请求参数,使用`...

    apache-httpclient应用所有jar

    1. **异步和同步API**: HttpClient 提供了同步和异步两种API,以适应不同的应用场景。同步API适合于简单且线性的工作流,而异步API则适用于处理大量并发请求,提高了系统性能。 2. **全面的HTTP协议支持**: ...

    android HttpClient

    通过`HttpClient`实例,我们可以设置连接超时、重试策略等网络连接参数。 2. `HttpGet`与`HttpPost`:这两个类分别代表HTTP的GET和POST请求。`HttpGet`用于获取服务器资源,而`HttpPost`则用于向服务器发送数据。 ...

    httpclient4.3 封装工具类

    封装工具类通常会提供方便的方法来发起这两种请求,比如`sendGetRequest(String url, Map, String&gt; params)`和`sendPostRequest(String url, Map, String&gt; params)`。这些方法会处理URL编码、参数拼接、Header设置等...

    httpclient httpclient-4.3

    2. **异步和同步API**:HttpClient 提供了同步和异步两种 API,满足不同场景的需求,异步 API 可以显著提高性能,尤其是在处理大量并发请求时。 3. **连接管理**:HttpClient 内置了连接池,可以有效地管理 TCP ...

    httpClient和URLConnection的区别

    在Android应用开发中,进行网络通信是常见的任务,其中两种主要的请求方式是使用`HttpURLConnection`和`HttpClient`。虽然两者都能实现HTTP通信,但它们在功能、使用方式和性能上存在一些区别。 首先,Apache ...

    HttpClientUtil工具类发送get和post请求,支持http和https,支持发送文件

    HttpClientUtil可能需要配置连接池的大小、超时时间等参数,以适应不同的应用场景。 综上所述,HttpClientUtil工具类在IT应用中扮演着关键角色,简化了HTTP和HTTPS请求的实现,特别是发送文件这样的复杂操作。通过...

    httpclient 4.2.2以及相关jar包

    4. **HttpClientBuilder**: 这是一个配置工具,通过链式方法可以方便地设置HttpClient的各种参数,如超时时间、重试策略、连接池大小等。 5. **HttpClientContext**: 提供上下文信息,存储与特定请求或会话相关的...

    httpclient和RestfuL风格上传下载文件

    在分布式系统中,这两种技术常常结合使用,以实现各个节点间的高效数据交互。 **HTTPClient简介** HTTPClient是Apache HttpClient项目提供的一个Java库,它允许开发者发送HTTP请求并接收响应。这个库提供了丰富的...

    httpclient 获取技术博客列表

    1. 创建HttpClient实例,配置连接参数(如超时时间、重试策略等)。 2. 构建HttpGet或HttpPost对象,设置请求URL。 3. 使用HttpClient执行请求,并获取HttpResponse。 4. 从HttpResponse中获取HttpEntity,然后读取...

    HttpClient.class.php

    1. **HTTP协议基础**:了解HTTP的基本概念,包括GET和POST两种主要的请求方法。GET用于获取资源,参数通过URL传递;POST用于提交数据,数据包含在请求体中。 2. **类与对象**:`HttpClient` 是一个面向对象的PHP类...

Global site tag (gtag.js) - Google Analytics