【发布时间】:2012-02-23 06:40:52
【问题描述】:
我正在使用这样的 HttpClient 阅读网页:
httpclient = new DefaultHttpClient();
httpget = new HttpGet("http://google.com");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream PIS = entity.getContent();
}
我需要对整个作业(连接、等待和阅读 - 全部或单独)进行超时。
我尝试在httpclient = new DefaultHttpClient(); 行之后设置超时参数:
int timeout=10;
httpclient.getParams().setParameter("http.socket.timeout", timeout * 1000);
httpclient.getParams().setParameter("http.connection.timeout", timeout * 1000);
httpclient.getParams().setParameter("http.connection-manager.timeout", new Long(timeout * 1000));
httpclient.getParams().setParameter("http.protocol.head-body-timeout", timeout * 1000);
但它不起作用(它在我设置的超时时间大约 10 倍后超时)。
所以我尝试使用httpget.abort() 和httpclient.getConnectionManager().shutdown() 在httpget = new HttpGet("http://google.com"); 行之后取消请求,如下所示:
(new Timer()).schedule(new java.util.TimerTask() {
public void run() {
httpget.abort();
httpclient.getConnectionManager().shutdown();
}
},10000);
但它没有效果(定时器运行;但是这两行代码什么也没做!)!!
我也试过用这个:
URL url = new URL("http://google.com");
URLConnection con = url.openConnection();
con.setConnectTimeout(10000);
con.setReadTimeout(10000);
InputStream PIS = con.getInputStream();
但这和我的第一次尝试一样(在HttpClient中设置超时参数)!!
有什么问题?
如何解决我的超时问题?
谢谢
【问题讨论】:
-
这总是让人头疼。见This
标签: java timeout httpclient urlconnection