我想知道Java中是否有标准API可以验证给定的URL?我想检查URL字符串是否正确(即给定的协议有效),然后检查是否可以建立连接。
我尝试使用HttpURLConnection,提供URL并连接到它。我的要求的第一部分似乎已得到满足,但是当我尝试执行HttpURLConnection.connect()时,将引发“ java.net.ConnectException:连接被拒绝”异常。
这可能是因为代理设置?我尝试设置代理的系统属性,但没有成功。
让我知道我在做什么错。
为了社区的利益,因为该主题在搜索时在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");
}
您需要同时创建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
}
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。only
android.webkit.URLUtil
:sun.net.www.protocol