我正在尝试检查网址是否可访问。我正在使用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可访问。我还需要进行其他检查吗?
答案 0 :(得分:2)
当Internet关闭时,它会抛出UnknownHostException
不,它会导致 DNS 关闭或DNS不知道主机。
我想知道如何检查防火墙是否阻挡了网址
您将获得连接超时。在极少数情况下,使用过时的硬件可能会导致拒绝连接,但我还没有听说过这个世纪。但是如果主机关闭,你也会得到连接超时。
我只是检查响应代码200以确保可以访问该URL。我还需要进行其他检查吗?
没有。但URL并未被防火墙阻止。 端口被防火墙阻止。
答案 1 :(得分:0)
我在防火墙阻止连接时经常看到的异常是“java.net.NoRouteToHostException”。尝试捕捉它,看看它是否有帮助。
答案 2 :(得分:0)
正如其他人所说,答案是"它取决于"。 例如,我们的外围防火墙会进行重定向,因为我们希望向用户显示自定义屏幕。 在这种情况下,我会尝试查看HTTP状态代码(30x)。
我认为为这样的事情编写通用函数很困难,您需要根据您的设置进行定制或使其非常易于配置。
请确保尽可能保持通用。 例如,如果您的代码假定重定向到特定的URL,那么一旦基础结构发生变化(这种情况比预期更频繁),这将会发生故障。