我试图检查是否存在我想要连接的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
。我应该使用什么例外或我应该做什么?
答案 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.
}