Python urllib.request.urlopen() возвращает ошибку 10061?

Я пытаюсь загрузить HTML-код страницы (в данном случае http://www.google.com), но получаю сообщение об ошибке. Вот моя интерактивная подсказка:

Python 3.2.2 (default, Sep  4 2011, 09:51:08) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib
>>> import urllib.request
>>> html = urllib.request.urlopen("http://www.google.com")
Traceback (most recent call last):
  File "\\****.****.org\myhome\python\lib\urllib\request.py", line 1136, in
 do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "\\****.****.org\myhome\python\lib\http\client.py", line 964, in req
uest
    self._send_request(method, url, body, headers)
  File "\\****.****.org\myhome\python\lib\http\client.py", line 1002, in _s
end_request
    self.endheaders(body)
  File "\\****.****.org\myhome\python\lib\http\client.py", line 960, in end
headers
    self._send_output(message_body)
  File "\\****.****.org\myhome\python\lib\http\client.py", line 805, in _se
nd_output
    self.send(msg)
  File "\\****.****.org\myhome\python\lib\http\client.py", line 743, in sen
d
    self.connect()
  File "\\****.****.org\myhome\python\lib\http\client.py", line 721, in con
nect
    self.timeout, self.source_address)
  File "\\****.****.org\myhome\python\lib\socket.py", line 404, in create_c
onnection
    raise err
  File "\\****.****.org\myhome\python\lib\socket.py", line 395, in create_c
onnection
    sock.connect(sa)
socket.error: [Errno 10061] No connection could be made because the target machi
ne actively refused it

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "\\****.****.org\myhome\python\lib\urllib\request.py", line 138, in
urlopen
    return opener.open(url, data, timeout)
  File "\\****.****.org\myhome\python\lib\urllib\request.py", line 369, in
open
    response = self._open(req, data)
  File "\\****.****.org\myhome\python\lib\urllib\request.py", line 387, in
_open
    '_open', req)
  File "\\****.****.org\myhome\python\lib\urllib\request.py", line 347, in
_call_chain
    result = func(*args)
  File "\\****.****.org\myhome\python\lib\urllib\request.py", line 1156, in
 http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "\\****.****.org\myhome\python\lib\urllib\request.py", line 1139, in
 do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 10061] No connection could be made
because the target machine actively refused it>
>>>

Я думаю, что брандмауэр моей сети блокирует соединение (большинство/все порты, кроме 80, заблокированы). Я не понимаю, почему, однако; не подключается ли Python к порту 80? Кто-нибудь знает, что происходит?


person HellaMad    schedule 06.03.2012    source источник
comment
Возможно, ваше решение находится здесь: http://stackoverflow.com/questions/5620263/using-an-http-proxy-python (и, следовательно, дублированный вопрос)   -  person Samuele Mattiuzzo    schedule 06.03.2012
comment
Я не использую urllib2, и этот вопрос другой, у нас обоих одна и та же ошибка.   -  person HellaMad    schedule 06.03.2012


Ответы (2)


Ошибка возникает на уровне операционной системы и не связана с Python. Так было бы с любым языком программирования.

Обратитесь к администратору сети, чтобы узнать, в чем дело, если только вы не можете решить проблемы с брандмауэром самостоятельно. Если вам нужен HTTP-прокси, вы можете настроить его для urllib.

person Mikko Ohtamaa    schedule 06.03.2012
comment
Только что сам столкнулся с этой проблемой, стоит знать, что переменная среды http_proxy в Windows вызвала проблему с urllib python. удаление решило проблему - person cudiaco; 17.06.2014

urllib берет настройки прокси из Internet Explorer, который обычно находится под Tools->Internet Options->Connections->Lan Settings

Если у вас есть прокси-сервер, убедитесь, что он корректен в IE, или установите его при использовании urllib. Если вы не используете прокси для просмотра, убедитесь, что настройки прокси в IE пусты.

Я боролся с этой проблемой несколько часов, пока не понял, что стороннее приложение, которое я когда-то установил, изменило настройку в IE, в то время как я с удовольствием просматривал страницы в Firefox без прокси.


Другое решение находится в этой ссылке, которая показывает, как заставить urllib игнорировать настройки прокси-сервера IE.

person michaelgo    schedule 04.03.2013