Как избежать, что URL.equals требует доступа к Интернету на Java?

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
11
0
1 981
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Не используйте URL.equals. Как говорится в документации,

Note: The defined behavior for equals is known to be inconsistent with virtual hosting in HTTP.

Как мне проверить равенство?

Mnementh 13.11.2008 03:54

Вы можете использовать toString () или toExternalForm (), чтобы получить внешнюю форму и сравнить их. Предварительное тестирование показывает, что у него нет доступа к DNS.

Chris Jester-Young 13.11.2008 03:57

Я только что поддержал ответ Билла. Просто вызовите toURI () для своих объектов URL.

Chris Jester-Young 13.11.2008 04:00

Если вы просто хотите сравнить строки URL-адресов, попробуйте

url1.toString().equals(url2.toString())

Эти две строки могут сильно отличаться, но указывают на один и тот же ресурс.

Bill the Lizard 13.11.2008 04:02

Если вы хотите проверить ресурс, на который ссылается URL-адрес, вам, очевидно, нужен доступ в Интернет. Поэтому я сделал предположение, что он хотел сравнить сами URL-адреса. Отсюда моя квалификация «если вы просто хотите сравнить строки URL-адресов».

Rick 13.11.2008 04:46
Ответ принят как подходящий

Используйте java.net.URI вместо URL.

И, конечно, это тоже имеет семантический смысл, потому что вы хотите сравнивать идентификаторы, а не местоположения.

Gareth 13.11.2008 04:01

Другие вопросы по теме