1

在 Java 中,是否有允许检查网站状态的标准库,即该网站是否可访问?

如果没有,是否有任何第三方库可以做同样的事情?

4

5 回答 5

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;
        }
      }

您认为哪些响应代码表示该站点“向上”和“向下”将稍微取决于您的应用程序。(如果您收到“内容禁止”响应,这是否意味着该站点出于您的目的“已启动”?)除非该站点实际上返回代码说“我已关闭”,否则您需要做出决定例如,超时是否表示站点实际上已关闭,或者您有本地防火墙问题等。但是,上述的一些变体应该就足够了。

于 2012-12-08T15:05:47.393 回答
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;
}
于 2012-12-08T15:15:37.520 回答
1

您可以使用https://hc.apache.org/之类的 HTTP 库发出请求并检查返回码

于 2012-12-08T14:59:06.390 回答
1

您可以使用 jersey 客户端(大量示例,例如http://www.mkyong.com/webservices/jax-rs/restful-java-client-with-jersey-client/

或者你可以使用 org.apache.http.client。

于 2012-12-08T15:02:18.540 回答
1

您可以使用任何可以进行 http 调用的 JAVA 库。两个这样流行的 java 库是HttpClientURLConnection

因此,您只需要使用上述任一库获取 url 的状态。如果状态为 200,则 URL 已启动。

如果您想在任何基于 unix 的机器上执行此操作,那么curl实用程序很容易知道状态。只要做一个男人卷曲你就会得到所有的选择。

于 2012-12-08T15:13:59.667 回答