用超时下载URL内容

问题描述:

我想用指定的下载时间下载java中的URL内容。例如:我希望www.yahoo.com的最大下载超时时间为10秒。如果下载超过10秒,则应该抛出错误。我编写了用于打开连接并下载整个内容的代码。但是,我如何设置下载超时?这里是代码片段:用超时下载URL内容

 StringBuilder text = new StringBuilder(); 

     urlconn = (HttpURLConnection)url.openConnection(); 
     urlconn.setConnectTimeout(100000); 
     //urlconn.setInstanceFollowRedirects(false); 
     urlconn.setRequestMethod("GET"); 
     urlconn.connect(); 
     buf = new BufferedReader(new InputStreamReader(urlconn.getInputStream())); 
     while((line = buf.readLine()) != null) 
      text.append(line); 
     System.out.println(url + "=> "+ urlconn.getResponseCode()); 
+1

请注意,您的连接超时时间为100秒。你想降低1〜3秒。 @Asaph:不,他要求下载(读取)超时。 – BalusC 2011-05-31 04:03:19

+0

@BalusC:谢谢。你是对的。在我看到您的评论和回答之前不久,我就明白了这一点。 – Asaph 2011-05-31 04:06:48

您可以通过URLConnection#setReadTimeout()进行设置。

urlconn.setReadTimeout(10000); // 10 sec 
// ... 
+0

谢谢。我会降低我的connecTimeout。 – user754740 2011-05-31 07:35:50

+2

这是否真的为实际阅读/下载设置了时间限制?看起来这只是连接建立之后可读数据呈现的时间的限制。 [“如果在有数据可供读取之前超时到期,则会引发java.net.SocketTimeoutException”](http://docs.oracle.com/javase/6/docs/api/java/net/URLConnection.html #setReadTimeout%28int%29)我已经尝试设置这个,然后通过一个输入流在长的jsonarray中读取,就像上面使用慢速连接一样,并且从不抛出异常。 – 2012-02-14 08:13:23