参考:http://blog.csdn.net/hi_kevin/article/details/32316171
有时使用httpclient的时候,需要等待N长时间,可能此时你决定放弃或者重试。实现上非常简单添加一个参数即可。
//这里的超时单位是毫秒。这里的http.socket.timeout相当于SO_TIMEOUT
httpClient.getParams().setIntParameter("http.socket.timeout",3000);
HttpConnectionManagerParams managerParams
= httpClient.getHttpConnectionManager().getParams();
// 设置连接超时时间(单位毫秒)
managerParams.setConnectionTimeout(30000);
// 设置读数据超时时间(单位毫秒)
managerParams.setSoTimeout(120000);
1,设置get方法请求超时为 5 秒
GetMethod getMethod= new GetMethod(url);
getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,5000 );
2,设置 Http 连接超时为5秒
HttpClient httpClient= new HttpClient();
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000 );
设置连接超时和请求超时,这两个超时的意义不同,需要分别设置。
参考自:http://blog.csdn.net/xinying0424/article/details/36006383
HttpClient 4 和 HttpClient 3 设置超时
HttpClient 4:
连接超时:
连接超时
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,60000);
// 或者
HttpConnectionParams.setConnectionTimeout(params,6000);
读取超时:
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,60000);
// 或者
HttpConnectionParams.setSoTimeout(params,60000);
HttpClient 3:
连接超时:
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
读取超时:
?
httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);
ok,以后再写httpClient这两个超时时间一定要加上,不加就很可能悲剧的了
版本vs
参考自:http://my.oschina.net/u/577453/blog/173724
最近用到了HttpClient写爬虫,可能我有新版本强迫症,老是喜欢用新版本的东西(虽说新版本不一定好用),然后就用了HttpClient 4.3。HttpClient这货和Lucene一样,每个版本的API都变化很大,这有点让人头疼。就好比创建一个HttpClient对象吧,每一个版本的都不一样,
3.X是这样的
HttpClient httpClient=new DefaultHttpClient();
4.3是这样的
CloseableHttpClient httpClient = HttpClients.createDefault();
当然,上面这些变化只不过是一些小变化,大家看看API大家就都会了。
我要讲的是超时设置,HttpClient有三种超时设置,最近比较忙,没时间具体归纳总结,以后再补上,我这里就讲一些最简单最易用的超时设置方法。
这是个3.X的超时设置方法
HttpClient client = new HttpClient();
client.setConnectionTimeout(30000);
client.setTimeout(30000);
HttpClient httpClient= new HttpClient();
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
4.X版本的超时设置(4.3后已过时)
HttpClient httpClient=new DefaultHttpClient();
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,2000);//连接时间
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,2000);//数据传输时间
4.3版本超时设置
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet=new HttpGet("http://www.baidu.com");//HTTP Get请求(POST雷同)
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();//设置请求和传输超时时间
httpGet.setConfig(requestConfig);
httpClient.execute(httpGet);//执行请求
评论:connection超时在linux是正常的,已经用你的代码重新测试了。又有个新问题,在windows平台下,如果请求的域名不存在,例如http://www.test2.com,代码立刻就会给返回,这个时候connection超时是无用的;在linux中是成功的,默认重连3次,connectionTimeout之后给异常返回。(待验证)