在Java中验证网址(Validating URL in Java)

2019-08-23 01:42发布

我想知道是否有在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。 捕获IOExceptionjava.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