在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
新闻热点
疑难解答