Метод equals() класса URL в библиотеке классов Java делает DNS-запрос, чтобы получить IP-адрес для имени хоста, чтобы проверить два IP-адреса на равенство. Это происходит даже с URL-адресами, созданными из одного и того же String. Есть ли способ избежать этого доступа в Интернет?




Не используйте URL.equals. Как говорится в документации,
Note: The defined behavior for
equalsis known to be inconsistent with virtual hosting in HTTP.
Вы можете использовать toString () или toExternalForm (), чтобы получить внешнюю форму и сравнить их. Предварительное тестирование показывает, что у него нет доступа к DNS.
Я только что поддержал ответ Билла. Просто вызовите toURI () для своих объектов URL.
Если вы просто хотите сравнить строки URL-адресов, попробуйте
url1.toString().equals(url2.toString())
Эти две строки могут сильно отличаться, но указывают на один и тот же ресурс.
Если вы хотите проверить ресурс, на который ссылается URL-адрес, вам, очевидно, нужен доступ в Интернет. Поэтому я сделал предположение, что он хотел сравнить сами URL-адреса. Отсюда моя квалификация «если вы просто хотите сравнить строки URL-адресов».
Используйте java.net.URI вместо URL.
И, конечно, это тоже имеет семантический смысл, потому что вы хотите сравнивать идентификаторы, а не местоположения.
Как мне проверить равенство?