我想知道是否有在Java中的任何标准API来验证一个给定的URL? 我要检查,如果两者的URL字符串是正确的,即给定的协议是否有效,然后检查是否可以建立连接。
我尝试使用HttpURLConnection类,提供URL,并连接到它。 我的要求第一部分似乎应验,但是当我尝试执行HttpURLConnection.connect(),“java.net.ConnectException:连接被拒绝”异常被抛出。
可这是因为代理服务器设置? 我试着设置了代理,但没有成功的系统性能。
让我知道我做错了。
Answer 1:
为社会的利益,因为这线程是顶在谷歌搜索时,
“URL验证的Java”
捕捉异常是昂贵的,应该尽量避免。 如果你只是想验证你的字符串是一个有效的URL,你可以使用UrlValidator类从Apache的百科全书验证项目。
例如:
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");
}
Answer 2:
您需要同时创建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
}
Answer 3:
该java.net.URL
类其实根本验证URL的一个好办法。 MalformedURLException
是不是扔在施工期间的所有格式不正确的URL。 捕获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
java.net. URISyntaxException
可以方便的URL验证。 然而,这种方法只抓住上面的简单案件之一。
结论是,没有标准的Java URL解析器来验证网址。
Answer 4:
只使用标准的API,将字符串传递给一个URL
对象,然后将其转换为一个URI
对象。 这将根据RFC2396标准的准确判断URL的有效性。
例:
public boolean isValidURL(String url) {
URL u = null;
try {
u = new URL(url);
} catch (MalformedURLException e) {
return false;
}
try {
u.toURI();
} catch (URISyntaxException e) {
return false;
}
return true;
}
Answer 5:
使用android.webkit.URLUtil
在Android上:
URLUtil.isValidUrl(URL_STRING);
注意:这仅仅是检查URL的初步方案,而不是完整的URL是有效的。
Answer 6:
还有就是不诉诸第三方库进行严格按到Java标准URL验证的方式:
boolean isValidURL(String url) {
try {
new URI(url).parseServerAuthority();
return true;
} catch (URISyntaxException e) {
return false;
}
}
的构造URI
检查该url
是一个有效的URI,并调用parseServerAuthority
确保它是一个URL(绝对或相对),而不是一个URN。
Answer 7:
只是重要指向的URL对象同时处理验证和连接。 然后,只对其中一个处理程序中sun.net.www.protocol已经提供协议授权的( 文件 ,FTP, 地鼠 ,HTTP,HTTPS, 罐子 , 邮寄地址 ,netdoc)是有效的。 例如,尽量让与LDAP协议的一个新的网址:
new URL("ldap://myhost:389")
你会得到一个java.net.MalformedURLException: unknown protocol: ldap
。
您需要实现自己的处理程序,并通过注册它URL.setURLStreamHandlerFactory()
很矫枉过正,如果你只是想验证URL语法,一个正则表达式似乎是一个简单的解决方案。
Answer 8:
你确定你使用正确的代理系统属性?
此外,如果使用的是1.5或1.6,你可以一个java.net.Proxy实例传递到的openConnection()方法。 这是更优雅IMO:
//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);
Answer 9:
谢谢。 开幕式上的通过代理的URL连接通过NickDK的建议工作正常。
//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);
系统属性但是,因为我曾前面提到不起作用。
再次感谢。
问候,科亚
文章来源: Validating URL in Java