HttpClient HttpMethod 超时设置

今天碰到了个问题. HttpClient 和HttpMethod 都进行了超时设置.
url如果使用域名形式的话,超时设置是起作用的,但如果是IP形式的话,超时设置完全不起作用.

public static void main(String[] args) throws HttpException, IOException {
		
		int clientConn = 10;
		int clientSot  = 10;
		int methodSot  = 10;
		String url = "http://123.124.21.22";
		
		Long t1 = get();
		HttpClient shortClient = new HttpClient();
//		shortClient.getHttpConnectionManager().getParams().setConnectionTimeout(clientConn);
//		shortClient.getHttpConnectionManager().getParams().setSoTimeout(clientSot);
		MultiThreadedHttpConnectionManager m = new MultiThreadedHttpConnectionManager();
		m.getParams().setConnectionTimeout(1000);
		m.getParams().setSoTimeout(1000);
		shortClient.setHttpConnectionManager(m);
		Long t2 = get();
		System.out.println("Client inited : "+(t2-t1));
		
		HttpMethod method = new GetMethod(url);
		method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler(0,false));
		method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, methodSot);
		Long t3 = get();
		System.out.println("Method inited : "+(t3-t2));
		int ret = 0;
		try{
			ret = shortClient.executeMethod(method);
		}catch(Exception e){
			e.printStackTrace();
		}
		Long t4 = get();
		System.out.println("Method executed : "+(t4-t3));
		
		if (ret == 200) {
			String content = method.getResponseBodyAsString();
			System.out.println(content);
		}
	}
	
	private static long get(){
		return new Date().getTime();
	}

 

可见,HttpClient使用MultiThreadedHttpConnectionManager 管理后,超时设置应该在MultiThreadedHttpConnectionManager 中设置, 原来HttpClient中的超时设置已经无效.之前碰到的20+秒的超时时间是由路由设置

 

http工具类:package com.tpl.util; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; /** * */ public class HttpClientUtil { public static void main(String arg[]) throws Exception { String url = "http://xxx/project/getxxx.action"; JSONObject params= new JSONObject(); List res=new ArrayList(); JSONObject params1 = new JSONObject(); // params1.put("code", "200"); // params1.put("phone", "13240186028"); res.add(params1); params.put("result", res); String ret = doPost(url, params).toString(); System.out.println(ret); } /** httpClient的get请求方式2 * @return * @throws Exception */ public static String doGet(String url, String charset) throws Exception { /* * 使用 GetMethod 来访问一个 URL 对应的网页,实现步骤: 1:生成一个 HttpClinet 对象并设置相应的参数。 * 2:生成一个 GetMethod 对象并设置响应的参数。 3:用 HttpClinet 生成的对象来执行 GetMethod 生成的Get * 方法。 4:处理响应状态码。 5:若响应正常,处理 HTTP 响应内容。 6:释放连接。 */ /* 1 生成 HttpClinet 对象并设置参数 */ HttpClient httpClient = new HttpClient(); // 设置 Http 连接超时为5秒 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000); /* 2 生成 GetMethod 对象并设置参数 */ GetMethod getMethod = new GetMethod(url); // 设置 get 请求超时为 5 秒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值