Java HTTP getResponseCode возвращает 200 для несуществующего URL - PullRequest
1 голос
/ 02 июня 2011

Я ожидал, что этот код вернет 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());
    }

Ответы [ 5 ]

2 голосов
/ 02 июня 2011

РЕДАКТИРОВАТЬ: я вижу, что вы звоните openConnection(), но не connect() - это может быть проблема?Я бы ожидал, что getResponseCode() на самом деле сделает запрос, если он еще этого не сделал, но стоит просто попробовать это ...


Это говорит о том, что вы, возможно, получили некоторыеDNS-распознаватель, который перенаправляет на «вспомогательную» (спам) страницу или что-то в этом роде.

Самый простой способ точно понять, что здесь происходит, - использовать Wireshark - иметь это изахват трафика (только для HTTP, чтобы упростить жизнь), а затем запустить свой код.Вы должны быть в состоянии увидеть, что происходит таким образом.

Обратите внимание, что я бы не ожидал 404 - потому что для этого нужно было бы найти веб-сервер, с которым можно начать разговор.Если вы пытаетесь перейти на хост, который не связан, не должно быть HTTP-ответа вообще .Я ожидаю, что connect() выдаст исключение.

1 голос
/ 02 июня 2011

попробуйте добавить «connection.connect ();»или посмотрите на возвращаемое содержимое ...

это может быть проблема с DNS, то есть: ваш DNS отправляется на парковку ... например: freedns делает это.

0 голосов
/ 02 июня 2011

В идеале вы должны получить эту ошибку:

java.net.UnknownHostException: www.thisurldoesnotexist

Но похоже, что ваш URL разрешен вашим провайдером DNS.

Например, в сети моей компании, выполняющей ваш код с URI"http://profile/" отображает профиль сотрудника.

Пожалуйста, проверьте файл etc.home, если вы находитесь в Windows, чтобы проверить, были ли изменены какие-либо настройки.

0 голосов
/ 02 июня 2011

Как @spgennard - я думаю, что это, скорее всего, проблема DNS.

  • Выбранный вами URL принадлежит спекулянту DNS.
  • Выбранный вами URL-адрес "припаркован" провайдером DNS.
  • Ваш провайдер связывается с результатами DNS, чтобы отправить браузер на какую-либо страницу поиска.

Также возможно, что вы обращаетесь к Интернету через прокси-сервер, и прокси-сервер делает что-то странное.

Способ диагностики этого состоит в том, чтобы просмотреть другую информацию в HTTP-ответах, которые вы получаете, в частности тело ответа.

0 голосов
/ 02 июня 2011

Вы могли бы:

  1. Разрешить IP с хоста страницы
  2. Попробуйте подключиться к порту 80 по разрешенному IP-адресу с помощью простых сокетов

Это немного низкий уровень, однако он добавит сложности, поскольку вам нужно будет сделать простой запрос GET через сокет. Затем проверьте ответ, чтобы убедиться, что это фактически HTTP-сервер, работающий на порту 80.

NMap может вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...