Почему моя программа может подключаться к несуществующему веб-сайту?

Я новичок в питоне и сетевом программировании, и у меня проблемы с простой программой. Я в основном открываю соединение с несуществующим веб-сайтом, и почему-то кажется, что соединение установлено. Более того, я получаю код возврата 200, который означает, что http-сервер ответил, что он существует и соединение в порядке. Вот соответствующая часть моего кода:

import httplib

conn = httplib.HTTPConnection("Nonexistentsite.com", 80)
conn.request("GET","/")
r  = conn.getresponse()
print r.status, r.reason
conn.close()

И когда я пробую google.com или любой другой существующий веб-сайт вместо nonexistentsite.com, я получаю 301 или 302 - Moved permanently.

Не могли бы вы пояснить, почему это происходит? Я использую visualStudio2010 (IronPython), если это важно.


person Karen Tsirunyan    schedule 06.11.2011    source источник
comment
Странно, но в обычном Python я получаю правильный socket.gaierror: [Errno -2] Name or service not known, может быть, вы столкнулись с ошибкой?   -  person John Doe    schedule 06.11.2011
comment
Если это не проблема реализации ironpython, могу ли я предположить, что проблема находится в другом месте вашего кода. Скорее всего, неправильно отлавливает исключение, которое выбрасывается здесь (на обычном питоне) из getresponse(), когда сайт не существует. Или вы тестировали в точности код, указанный выше? Вы говорите, что это релевантная часть, которая подразумевает, что есть другие части.   -  person tjm    schedule 06.11.2011
comment
@tjm Я выложил весь код. Как видите, никаких исключений я не обрабатываю. Однако это ожидаемое поведение?   -  person Karen Tsirunyan    schedule 06.11.2011
comment
@ Карен. Извините, я действительно не знаю, но я получаю здесь сообщение об ошибке (такое же, как у Джона Доу) P.S. Обратите внимание, что он добавляет request, а не getresponse, как я сказал выше.   -  person tjm    schedule 06.11.2011


Ответы (3)


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

Что означает ping Nonexistentsite.com на машине, на которой вы тестировали свой код Python?

person Baffe Boyois    schedule 06.11.2011
comment
DNS каким-то образом находит для него IP-адрес [92.242.144.2], но время пинга истекает. - person Karen Tsirunyan; 08.11.2011

Запуская ваш код на Python Cygwin, я получаю сообщение об ошибке Nonexistentsite.com, поэтому я не уверен, что с IronPython происходит что-то странное.

Google.com - это Moved permanently, потому что у Google есть система переадресации для их главной страницы. Например, если они обнаружат, что вы находитесь в Великобритании, google.com перенаправит вас на google.co.uk (не проверено, я нахожусь в США, но это то, что я прочитал). Если я попробую ваш код с stackoverflow.com или другим сайтом, на котором нет такой сложной настройки, как Google, я получу 200 OK ответ.

person davidscolgan    schedule 06.11.2011

Я тестировал это, но вместо этого использовал www.google.com. Это дало 302 Найдено. После небольшого поиска в Google я обнаружил, что 302 Found означает перенаправление. Это, вероятно, означает, что пользователи перенаправляются на правильный сайт Google для своего региона, например www.google.co.uk для Великобритании. 302 - Moved Permanently - это, вероятно, одно и то же, но для IronPython все выглядит иначе.

редактировать -

Он существует, потому что Google все еще использует этот сервер и выполняет перенаправления.

person Community    schedule 06.11.2011