【发布时间】:2026-01-23 02:30:01
【问题描述】:
我正在尝试检查该 URL 是否可访问。我正在使用 HttpURLConnection 。现在我正在实施它。
public static boolean isUrlAccessible(final String urlToValidate)
throws WAGException {
URL url = null;
HttpURLConnection huc = null;
int responseCode = -1;
try {
url = new URL(urlToValidate);
huc = (HttpURLConnection) url.openConnection();
huc.setRequestMethod("HEAD");
huc.connect();
responseCode = huc.getResponseCode();
} catch (final UnknownHostException e) {
e.printStackTrace();
System.out.println(e.getMessage()+" "+e.getLocalizedMessage());
return false;
} catch (final MalformedURLException e){
e.printStackTrace();
System.out.println(e.getMessage()+" "+e.getLocalizedMessage());
return false;
} catch (ProtocolException e) {
e.printStackTrace();
System.out.println(e.getMessage()+" "+e.getLocalizedMessage());
return false;
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage()+" "+e.getLocalizedMessage());
return false;
} finally {
if (huc != null) {
huc.disconnect();
}
}
return responseCode == 200;
}
当 Internet 出现故障时,它会引发 UnknownHostException,我想知道如何检查防火墙是否阻止了 URL,这就是我得到异常的原因,而不是因为 URL 不可访问。另外,我只是检查响应代码 200 以确保 URL 可访问。我还需要执行其他检查吗?
【问题讨论】:
-
观察:如果您使用的是 Java 7+,您可以使用 multi-catch 来减少每个单独的 catch 块中的代码重复。
-
这真的取决于您的防火墙实施。它可能是超时(如果防火墙只是丢弃数据包),如果防火墙拒绝它们,则可能是另一种形式的 ioexception,或者如果您有某种过滤代理,则可能是更高级别的东西。在这种情况下,它可能会返回 403,这很难与常规响应区分开来,除非您知道要查找什么。
-
@JnoK - 感谢您的意见。没想到。稍后我将以不同的方式处理每个异常,所以我想我将不得不为不同的异常设置不同的 catch 块。
-
好的,我想我会以通用的方式处理这些异常。有关状态代码检查的任何输入?我只检查 200 还是应该考虑 300 等?
-
一般来说,您无法可靠地区分“被防火墙阻止”和“网络错误”。
标签: java url firewall httpconnection