2

我试图检查我想要连接的 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。我应该使用什么例外或我还应该做什么?

4

1 回答 1

3

AMalFormedURLException只会在 URL确实格式错误时抛出,即它不符合URL 规范,而不是在它不存在时。这是类的构造函数所掩盖的java.net.URL。它的javadoc告诉以下内容:

投掷

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

因此,它只会在您使用 example"www.malformedurl.com""foo://www.malformedurl.com"代替"http://www.malformedurl.com".

要检测 URL 是否存在,您最好采用不同的解决方案。如果主机名未知,则应UnknownHostException改为捕获:

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 地址是否可访问,则应SocketTimeoutException改为捕获:

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.
}
于 2011-10-25T17:47:29.080 回答