Java 如何检查URL是否被我的防火墙阻止

Java 如何检查URL是否被我的防火墙阻止,java,url,firewall,httpconnection,Java,Url,Firewall,Httpconnection,我正在尝试检查URL是否可访问。我正在使用HttpURLConnection。这是我现在正在实施的 public static boolean isUrlAccessible(final String urlToValidate) throws WAGException { URL url = null; HttpURLConnection huc = null; int responseCode = -1;

我正在尝试检查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;
    }

当互联网关闭时,它会抛出一个未知的异常,我想知道如何检查防火墙是否阻止了URL,这就是为什么我会出现异常,而不是因为URL不可访问。另外,我只是检查响应代码200,以确保URL是可访问的。是否需要执行其他检查?

当防火墙阻止连接时,我通常看到的异常是“java.net.noroutetohestException”。试着抓住它,看看是否有帮助

当互联网瘫痪时,它抛出了一个未知的例外

不,当DNS关闭或DNS不知道主机时,它会抛出该错误

我想知道如何检查防火墙是否阻止URL

您将获得连接超时。在极少数情况下,使用过时的硬件可能会导致连接被拒绝,但我在本世纪还没有听说过这种情况。但是,如果主机关闭,您也将获得连接超时

我只是检查响应代码200,以确保URL是可访问的。我还需要做其他检查吗


没有。但是URL不会被防火墙阻止。端口被防火墙阻止。

正如其他人所说,答案是“视情况而定”。 例如,我们的外围防火墙执行重定向,因为我们希望向用户显示一个自定义屏幕。 在本例中,我将尝试查看HTTP状态代码(30x)

我认为很难为这样的东西编写通用函数,您需要根据您的设置对其进行定制或使其非常可配置

只要确保尽可能保持通用性。
例如,如果您的代码假设重定向到特定的URL,那么一旦基础结构发生变化(这种情况发生的频率比预期的要高)。

观察:如果您使用的是Java 7+,您可以使用多捕获来减少每个捕获块中的代码重复。这实际上取决于您的防火墙实现。它可能是一个超时(在防火墙简单地丢弃数据包的情况下),如果防火墙拒绝它们,则是另一种形式的ioexception,如果您有某种过滤代理,则可能是更高级别的。在这种情况下,它可能返回403,这很难与常规响应区分开来,除非您知道要查找什么。@JnoK-谢谢您的输入。我没想过。稍后我将以不同的方式处理每个异常,因此我想我必须为不同的异常使用不同的catch块。好的,我想我将以通用的方式处理这些异常。有关于状态代码检查的输入吗?我只检查200还是应该考虑300秒等等?一般来说,你不能区分“防火墙阻塞”和“网络错误”。其他人是否看到同样的东西完全取决于防火墙。这是指您的本地主机不知道如何到达那里,例如,到专用IP地址。与防火墙无关。对不起,我错过了什么值得投反对票?我看了一下文档,见这里,既然OP提到了防火墙,我想指出,如果防火墙阻止了连接,这是最常见的例外情况?文档似乎是错误的。防火墙无法控制源路由。你没有任何证据表明这是最常见的症状。