Javaには、Webサイトのステータス、つまりWebサイトにアクセスできるかどうかを確認できる標準ライブラリがありますか?
そうでない場合、同じことを行うサードパーティのライブラリはありますか?
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;
}
}
サイトが「稼働中」または「停止中」であることを意味すると考える応答コードは、アプリケーションによって若干異なります。(「コンテンツは禁止されています」という応答を受け取った場合、それはサイトがあなたの目的のために「アップ」していることを意味しますか?) サイトが実際に「ダウンしています」というコードを返さない限り、次のことについて決定を下す必要があります。たとえば、タイムアウトがサイトが実際にダウンしていることを表しているか、ローカルのファイアウォールの問題などを表しているかどうか。それでも、上記のいくつかの変形で十分です。
以下のことを行うことができます。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;
}
https://hc.apache.org/のような HTTP ライブラリを使用して、リクエストを作成し、リターン コードを確認できます。
または、org.apache.http.client を使用できます。
http 呼び出しを行うことができる任意の Java ライブラリを使用できます。そのような一般的な 2 つの Java ライブラリは、HttpClientとURLConnectionです。
したがって、上記のライブラリのいずれかを使用して URL のステータスを取得する必要があります。ステータスが 200 の場合、URL はアップしています。
UNIX ベースのマシンでこれを実行したい場合は、curlユーティリティでステータスを簡単に知ることができます。man on curl を実行するだけで、すべてのオプションが得られます。