2013-05-02 68 views
0

我试图从网页中获取数据,但是如果页面不可用,程序将运行很长时间直到超时。我需要它尝试获取网页10秒,如果它没有得到响应,那么它将返回null。我该如何让它以这种方式工作?Java获取网页源或超时

这里是我得到的数据:

public int getThreadData(String address) throws IOException{ 
    String valueString = null; 
    URL url = new URL("http://" + address + ":8080/web-console/ServerInfo.jsp"); 
    URLConnection urlConnection = url.openConnection(); 
    urlConnection.setRequestProperty("User-Agent", 
     "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) 
     Gecko/20100401"); 
    BufferedReader br = new BufferedReader(new InputStreamReader 
     (urlConnection.getInputStream(), "UTF-8")); 

    String inputLine; 

    while ((inputLine = br.readLine()) != null) 
    { 
     if (inputLine.contains("#Threads")) 
     { 
      valueString = inputLine.substring(inputLine.indexOf("/b>") + 3); 
      valueString = valueString.substring(0, valueString.indexOf("<")); 
     } 
    } 
    br.close(); 

    return Integer.parseInt(valueString); 

} 

回答

2

你有没有尝试设置连接超时类似以下内容:

urlConnection.setConnectTimeout(10000); // 10000 milliseconds 
+0

不,我没有:D谢谢,这就是我一直在寻找的东西。 – Dropout 2013-05-02 09:23:41

1

你应该使用一个HTTP库(如Apache's HTTPClient),可以大大简化这些东西。如果您使用了HTTPClient,你会做这样的事情:

  // Set the timeout to 20-seconds. 
      final HttpParams httpParams = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000); 
      HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000); 

      DefaultHttpClient httpClient = new DefaultHttpClient(cm, httpParams); 
      HttpPost postRequest = new HttpPost(URL); 
      HttpResponse response; 
      response = httpClient.execute(postRequest); 
+0

'HttpConnectionParams.setConnectionTimeout'是远远大于'UrlConnection.setConnectTimeout更简单'? – jarnbjo 2013-05-02 09:11:02