A MalFormedURLException
будет выброшено, только если URL действительно искажен, то есть он не соответствует спецификации URL , а не когда он не существует.Это под прикрытием был брошен конструктором класса java.net.URL
.Его javadoc сообщает следующее:
throws
MalformedURLException
- если в строке указан неизвестный протокол.
Итакон будет выдан только при использовании, например, "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.
}