Java中的验证URL

问题描述 投票:95回答:10

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

我尝试使用HttpURLConnection,提供URL并连接到它。我的要求的第一部分似乎已得到满足,但是当我尝试执行HttpURLConnection.connect()时,将引发“ java.net.ConnectException:连接被拒绝”异常。

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

让我知道我在做什么错。

java validation url
10个回答
141
投票

为了社区的利益,因为该主题在搜索时在Google上排名第一“ URL验证器java


捕获异常的代价很高,应尽可能避免。如果只想验证String是有效的URL,则可以使用UrlValidator项目中的Apache Commons Validator类。

例如:

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

-1
投票
谢谢。按照NickDK的建议通过传递代理来打开URL连接可以正常工作。

36
投票

您需要同时创建URL对象和URLConnection对象。以下代码将测试URL的格式以及是否可以建立连接:

try {
    URL url = new URL("http://www.yoursite.com/");
    URLConnection conn = url.openConnection();
    conn.connect();
} catch (MalformedURLException e) {
    // the URL is not in a valid form
} catch (IOException e) {
    // the connection couldn't be established
}

32
投票

java.net.URL类实际上根本不是验证URL的好方法。在构造过程中,对所有格式错误的URL都抛出MalformedURLException。在IOException上捕获java.net.URL#openConnection().connect()也不验证URL,仅告诉或是否可以建立连接。考虑这段代码:

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#toURI()与对异常java.net. URISyntaxException的处理结合起来可以简化URL的验证。但是,此方法仅捕获上述非常简单的情况之一。结论是没有标准的Java URL解析器来验证URL。

12
投票
使用

only


9
投票
在Android上使用android.webkit.URLUtil

6
投票
有一种方法可以严格按照Java中的标准执行URL验证,而无需借助第三方库:

2
投票
指出URL对象同时处理验证和连接很重要。然后,仅授权在

sun.net.www.protocol


1
投票
您确定使用正确的代理作为系统属性吗?

0
投票
我认为最好的响应来自用户@ b1nary.atr0phy。无论如何,我建议将b1nay.atr0phy响应中的方法与正则表达式结合使用,以涵盖所有可能的情况。
© www.soinside.com 2019 - 2024. All rights reserved.