Urllib2.urlopen будет висеть навсегда, несмотря на таймаут

Надеюсь, что это довольно простой вопрос, но это сводит меня с ума. Я использую Python 2.7.3 при установке сервера ubuntu 12.10 из коробки. Я продолжал масштабирование проблемы, пока не добрался до этого фрагмента:

import urllib2
x=urllib2.urlopen("http://casacinema.eu/movie-film-Matrix+trilogy+123+streaming-6165.html", timeout=5)

Он просто вешает навсегда, никогда не переходит в тайм-аут. Я, очевидно, что-то делаю неправильно. Кто-нибудь может помочь? Большое вам спасибо!

Маттео

2 ответа

Похоже, вы испытываете проблему с прокси-сервером. Здесь большое объяснение того, как обходить это: Попытка доступа к Интернету с использованием urllib2 в Python.

Я выполнил свой код на моем ubuntu с помощью python 2.7.3 и не видел никаких ошибок.

Также рассмотрите возможность использования requests:

import requests
response = requests.get("http://casacinema.eu/movie-film-Matrix+trilogy+123+streaming-6165.html", timeout=5)
print response.status/pre_

См. также:


Оригинальный плакат заявил, что они не понимают, почему он виснет, но они также хотели, чтобы urllib.request.urlopen не висел. Я не могу сказать, как удержать его от зависания, но если это помогает кому-то, то почему он может повесить.

Клиент Python-urllib/3.6 придирчив. Он ожидает, например, что сервер вернет HTTP/1.1 200 OK not HTTP 200 OK. Он также ожидает, что сервер закроет соединение, когда он отправит connection: close в заголовки.

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

licensed under cc by-sa 3.0 with attribution.