Key*_*eya 96 java validation url
我想知道Java中是否有任何标准API来验证给定的URL?我想检查URL字符串是否正确,即给定协议是否有效,然后检查是否可以建立连接.
我尝试使用HttpURLConnection,提供URL并连接到它.我的要求的第一部分似乎已经完成但是当我尝试执行HttpURLConnection.connect()时,抛出'java.net.ConnectException:Connection refused'异常.
这可能是因为代理设置?我尝试为代理设置系统属性但没有成功.
让我知道我做错了什么.
Yon*_*tan 142
为了社区的利益,因为在搜索
" url validator java " 时,此主题在Google上排名第一
捕获异常是昂贵的,应尽可能避免.如果您只想验证String是否是有效的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");
}
Run Code Online (Sandbox Code Playgroud)
Oll*_*lly 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
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*tin 33
java.net.URL实际上,这个类并不是验证URL的好方法.MalformedURLException是不是扔在施工期间的所有格式不正确的URL.追赶IOException上java.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();
}
Run Code Online (Sandbox Code Playgroud)
..不会抛出任何例外.
我建议使用一些使用无上下文语法实现的验证API,或者在非常简化的验证中使用正则表达式.但是我需要有人为此建议一个优质或标准的API,我最近才开始自己搜索它.
注意
有人建议,URL#toURI()结合处理异常java.net. URISyntaxException可以促进URL的验证.但是,这种方法只能抓住上面一个非常简单的案例.
结论是没有标准的java URL解析器来验证URL.
b1n*_*phy 12
仅使用标准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;
}
Run Code Online (Sandbox Code Playgroud)
使用android.webkit.URLUtilon android:
URLUtil.isValidUrl(URL_STRING);
Run Code Online (Sandbox Code Playgroud)
注意:它只是检查URL的初始方案,而不是整个URL是有效的.
有一种方法可以严格按照Java中的标准执行URL验证,而无需借助第三方库:
boolean isValidURL(String url) {
try {
new URI(url).parseServerAuthority();
return true;
} catch (URISyntaxException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
URIcheck 的构造函数url是有效的URI,并对其进行调用以parseServerAuthority确保它是URL(绝对或相对)而不是URN。
您确定使用正确的代理作为系统属性吗?
另外,如果您使用 1.5 或 1.6,您可以将 java.net.Proxy 实例传递给 openConnection() 方法。在我看来,这是更优雅的:
//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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143820 次 |
| 最近记录: |