Класс java.net.URL
на самом деле не является хорошим способом проверки URL. MalformedURLException
- это , а не , брошенное во все некорректные URL-адреса во время создания. Перехват IOException
на java.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
может облегчить проверку URL-адресов. Тем не менее, этот метод ловит только один из очень простых случаев выше.
Вывод заключается в том, что стандартного парсера Java для проверки URL не существует.