#java #networking
#java #сеть
Вопрос:
Я ожидал, что этот код вернет 404, однако он выдает вывод :
«Код ответа равен 200»
Можно ли узнать, как различать существующие и несуществующие веб-страницы . . . большое спасибо,
try
{
// create the HttpURLConnection
URL url = new URL("http://www.thisurldoesnotexist");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
System.out.println("Response code is " connection.getResponseCode());
}
Комментарии:
1. Если вы получили обратно 200, значит, страница действительно существует…
2. попробуйте
http://www.fackurl.com
и посмотрите, что вы получите, вероятно, вы получите исключение
Ответ №1:
РЕДАКТИРОВАТЬ: я вижу, что вы позвонили, openConnection()
но не connect()
— может ли это быть проблемой? Я бы ожидал getResponseCode()
, что запрос действительно будет выполнен, если он еще не выполнен, но стоит просто попробовать это…
Это говорит о том, что у вас, возможно, есть какой-то DNS-распознаватель, который перенаправляет на страницу «помощника» (спама) или что-то в этом роде.
Самый простой способ точно увидеть, что здесь происходит, — это использовать Wireshark — настроить его и перехватывать трафик (только HTTP, чтобы упростить жизнь), а затем запустить свой код. Вы должны быть в состоянии увидеть, что происходит таким образом.
Обратите внимание, что я бы не ожидал 404 — потому что это потребовало бы возможности найти веб-сервер, с которым можно связаться для начала. Если вы пытаетесь перейти к хосту, который не задействован, ответа HTTP не должно быть вообще. Я бы ожидал, connect()
что он выдаст исключение.
Ответ №2:
попробуйте добавить «connection.connect();» или посмотрите на возвращаемое содержимое…
это может быть проблема с dns, т. Е. ваш dns отправляется на место парковки… например: freedns делает это.
Ответ №3:
Вы могли бы:
- Разрешите IP-адрес от хоста страницы
- Попробуйте подключиться к порту 80 на разрешенном IP-адресе, используя обычные сокеты
Однако это немного низкий уровень и добавит сложности, поскольку вам нужно будет выполнить простой GET-запрос через сокет. Затем проверьте ответ, чтобы убедиться, что это действительно HTTP-сервер, работающий на порту 80.
Ответ №4:
В идеале вы должны получать эту ошибку:
java.net.UnknownHostException: www.thisurldoesnotexist
Но похоже, что ваш URL разрешен вашим DNS-провайдером.
Например, в сети моей компании выполняется ваш код с URI «http://profile /» отображает профиль сотрудника.
Пожалуйста, также проверьте файл etc.home, если вы используете Windows, чтобы проверить, были ли изменены какие-либо настройки.
Ответ №5:
Как @spgennard — я думаю, что это, скорее всего, проблема с DNS.
- Выбранный вами URL-адрес принадлежит спекулянту DNS.
- Выбранный вами URL-адрес «припаркован» поставщиком DNS.
- Ваш провайдер изменяет результаты вашего DNS, чтобы отправить ваш браузер на какую-либо страницу поиска.
Также возможно, что вы получаете доступ к Сети через прокси-сервер, и прокси-сервер делает что-то странное.
Способ диагностировать это — посмотреть на другую информацию в получаемых вами HTTP-ответах, особенно в теле ответа.