首页 > 编程 > Java > 正文

Java中httpClient中的三种超时设置小结(转)

2019-11-08 01:26:31
字体:
来源:转载
供稿:网友

在Apache的HttpClient包中,有三个设置超时的地方:

/* 从连接池中取连接的超时时间*/ ConnManagerParams.setTimeout(params, 1000); /*连接超时*/ HttpConnectionParams.setConnectionTimeout(params, 2000); /*请求超时*/HttpConnectionParams.setSoTimeout(params, 4000);

第一行设置ConnectionPoolTimeout:

这定义了从ConnectionManager管理的连接池中取出连接的超时时间,此处设置为1秒。 第二行设置ConnectionTimeout:  

这定义了通过网络与服务器建立连接的超时时间。Httpclient包中通过一个异步线程去创建与服务器的socket连接,这就是该socket连接的超时时间,此处设置为2秒。

第三行设置SocketTimeout:     这定义了Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间,此处设置为4秒。 以上3种超时分别会抛出ConnectionPoolTimeoutException,ConnectionTimeoutException与SocketTimeoutException。

ConnectTimeoutException: 当连接HTTP服务器或者等待HttpConnectionManager管理的一个有效连接超时引发该异常。

SocketTimeoutException: 当读取或者接收Socket超时引起该异常。

测试版本为HttpClient——3.1

public class TestHttpClientMain { 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) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}

原文:http://www.111cn.net/jsp/java/55314.htm


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表