在 Java 中验证 URL

2022-08-31 09:19:40

我想知道Java中是否有任何标准API来验证给定的URL?我想检查URL字符串是否正确,即给定的协议是否有效,然后检查是否可以建立连接。

我尝试使用HttpURLConnection,提供URL并连接到它。我的要求的第一部分似乎得到了满足,但是当我尝试执行HttpURLConnection.connect()时,'java.net.ConnectException:Connection refused'异常被抛出。

这可能是因为代理设置吗?我尝试为代理设置系统属性,但没有成功。

让我知道我做错了什么。


答案 1

为了社区的利益,因为这个线程在搜索
url validator java”时在Google上是顶级的


捕获异常成本很高,应尽可能避免。如果您只想验证您的字符串是否为有效的URL,则可以使用Apache Commons Validator项目中的UrlValidator类。

例如:

String[] schemes = {"http","https"}; // DEFAULT schemes = "http", "https", "ftp"
UrlValidator urlValidator = new UrlValidator(schemes);
if (urlValidator.isValid("ftp://foo.bar.com/")) {
   System.out.println("URL is valid");
} else {
   System.out.println("URL is invalid");
}

答案 2

实际上,该类根本不是验证 URL 的好方法。 在构造期间,不会在所有格式错误的 URL 上抛出。Catch on也不会验证URL,只会告诉是否可以建立连接。java.net.URLMalformedURLExceptionIOExceptionjava.net.URL#openConnection().connect()

请考虑以下代码段:

    try {
        new URL("http://.com");
        new URL("http://com.");
        new URL("http:// ");
        new URL("ftp://::::@example.com");
    } catch (MalformedURLException malformedURLException) {
        malformedURLException.printStackTrace();
    }

..这不会引发任何异常。

我建议使用一些使用上下文无关语法实现的验证API,或者在非常简化的验证中仅使用正则表达式。但是,我需要有人为此建议一个高级或标准的API,我最近才开始自己搜索它。

注意有人建议,与处理异常相结合可以促进URL的验证。但是,此方法仅捕获上述非常简单的情况之一。URL#toURI()java.net. URISyntaxException

结论是没有标准的java URL解析器来验证URL。