如何检查URL是否不存在?

时间:2011-10-25 10:30:08

标签: java networking jsoup malformedurlexception

我试图检查是否存在我想要连接的URL。这是我的尝试:

try {
    // Connect to the url
    document = Jsoup.connect("http://www.malformedurl.com").get();
    tags = document.select(".tags .tag a");
    num = document.select(".tag .count");
    // Take the wanted data 
    UrlFunctions.UrlParse(tags, num);
} catch (java.net.MalformedURLException e) {
    System.out.println("URL DOESNT EXIST");
}

运行之后,我收不到消息URL DOESNT EXIST。我应该使用什么例外或我应该做什么?

1 个答案:

答案 0 :(得分:3)

只有当网址确实格式错误时才会引发MalFormedURLException,即它不符合URL spec,而不符合javadoc。这是由java.net.URL类的构造函数抛出的。其UnknownHostException告诉以下内容:

  

引发

     

MalformedURLException - 如果字符串指定了未知协议。

因此,只有当您使用"www.malformedurl.com"或者{。}时才会抛出它 "foo://www.malformedurl.com"代替"http://www.malformedurl.com"

要检测网址是否存在,您最好先寻找其他解决方案。如果主机名未知,那么您应该抓住SocketTimeoutException而不是:

try {
    document = Jsoup.connect("http://www.malformedurl.com").get();
    // ...
} catch (UnknownHostException e) {
    System.err.println("Unknown host");
    e.printStackTrace(); // I'd rather (re)throw it though.
}

这不一定是另一端的问题,当网络上的DNS服务器是虚假的时候也会发生这种情况。

或者,为了检测IP地址是否可达,您应该抓住{{3}}而不是:

try {
    document = Jsoup.connect("http://12.34.56.78").get();
    // ...
} catch (SocketTimeoutException e) {
    System.err.println("IP cannot be reached");
    e.printStackTrace(); // I'd rather (re)throw it though.
}