2012-12-08 46 views
0

在Java中,是否有一個標準庫允許檢查網站的狀態,即網站是否可訪問?在Java中檢查網站的狀態

如果沒有,是否有任何第三方庫可以做同樣的事情?

+1

使用一個'URLConnection',得到一個'InputStream'並嘗試讀取。如果超時,您的網站無法訪問。 –

回答

2

你可以做下面的事情,你在哪裏得到響應,200即別的訪問不可訪問,

public static boolean isAccessable(String url, int timeout) { 
    url = url.replaceFirst("https", "http"); // Otherwise an exception may 
               // be thrown on invalid SSL 
               // certificates. 

    try { 
     HttpURLConnection connection = (HttpURLConnection) new URL(url) 
       .openConnection(); 
     connection.setConnectTimeout(timeout); 
     connection.setReadTimeout(timeout); 
     connection.setRequestMethod("HEAD"); 
     int responseCode = connection.getResponseCode(); 
     if (responseCode != 200) { 
      return false; 
     } 
    } catch (IOException exception) { 
     return false; 
    } 
    return true; 
} 
1

您可以使用像https://hc.apache.org/一個HTTP庫發出請求並檢查返回代碼

+2

無需爲此引入一個庫。參見['HttpURLConnection'](http://docs.oracle.com/javase/1.4.2/docs/api/java/net/HttpURLConnection.html)。 –

2

您可以打開到URL的連接並檢索響應代碼和(可選)內容:

public static boolean isSiteUp(URL site) { 
     try { 
      HttpURLConnection conn = (HttpURLConnection) site.openConnection(); 
      conn.getContent(); 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       return true; 
      } 
      return false; 
     } catch (SocketTimeoutException tout) { 
      return false; 
     } catch (IOException ioex) { 
      // You may decide on more specific behaviour... 
      return false; 
     } 
     } 

你認爲什麼響應代碼來表示,該網站是「向上」和「向下」,將取決於稍微在你的應用程序上(如果您收到「禁止內容」的回覆,這是否意味着該網站對您而言「起作用」?)除非網站實際返回了一段代碼以說明「我已失望」,那麼您需要做出決定無論是超時表示該網站實際上停止運行還是存在本地防火牆問題等。但是,儘管如此,上述的一些變體就足夠了。

1

您可以使用任何可以進行http調用的JAVA庫。兩個這樣流行的java庫是HttpClientURLConnection

所以你只需要使用上述庫中的任何一個獲得URL的狀態。如果狀態爲200,則URL已啓動。

如果你想在任何基於Unix的機器上做到這一點,然後curl實用程序很容易知道的狀態。只要做一個捲曲的人,你會得到所有的選擇。