Почему я не могу заставить метод Python urlopen () работать в Windows? - PullRequest
6 голосов
/ 27 мая 2010

Почему этот простой код Python не работает?

import urllib
file = urllib.urlopen('http://www.google.com')
print file.read()

Это ошибка, которую я получаю:

Traceback (most recent call last):
  File "C:\workspace\GarchUpdate\src\Practice.py", line 26, in <module>
    file = urllib.urlopen('http://www.google.com')
  File "C:\Python26\lib\urllib.py", line 87, in urlopen
    return opener.open(url)
  File "C:\Python26\lib\urllib.py", line 206, in open
    return getattr(self, name)(url)
  File "C:\Python26\lib\urllib.py", line 345, in open_http
    h.endheaders()
  File "C:\Python26\lib\httplib.py", line 892, in endheaders
    self._send_output()
  File "C:\Python26\lib\httplib.py", line 764, in _send_output
    self.send(msg)
  File "C:\Python26\lib\httplib.py", line 723, in send
    self.connect()
  File "C:\Python26\lib\httplib.py", line 704, in connect
    self.timeout)
  File "C:\Python26\lib\socket.py", line 514, in create_connection
    raise error, msg
IOError: [Errno socket error] [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

Я пробовал это на нескольких разных страницах, но я никогда не смог заставить метод urlopen работать правильно.

Ответы [ 4 ]

4 голосов
/ 27 мая 2010

Ваш код здесь не проблема.

У вас есть какие-либо настройки прокси в вашем IE?

Это говорит о документации по python для urllib.urlopen:
"" "
В среде Windows, если не заданы переменные среды прокси,
настройки прокси получаются из настроек Интернет реестра
раздел.
"" "

3 голосов
/ 04 марта 2014

Попробуйте использовать urllib2, если возможно изменить некоторые строки кода. Установить аргумент тайм-аута в секундах

Например:

urllib2.urlopen(http://www.abc.com/api, timeout=20)

Здесь связь сохраняется в течение более длительного периода времени. Так, например, если вы читаете слишком большой XML-файл, это предотвращает неполное чтение.

Приведенный выше код никогда не будет работать, если сетевое соединение работает медленно или внезапно разрывается.

1 голос
/ 27 мая 2010

Если у вас есть wireshark, проверьте, что отсылается, и есть ли что-нибудь возвращающееся вообще. Это поможет вам отладить проблему, если вы увидите, как отправляется запрос GET.

Также я помню, что однажды у меня была похожая проблема: я очистил кэш своего DNS

(ipconfig / flushdns) и перезапущен. Это исправило мою проблему. Думаю, не больно пытаться.

0 голосов
/ 21 октября 2018

для питона 3:

import urllib.request

proxies=urllib.request.ProxyHandler({'http':None})

opener=urllib.request.build_opener(proxies)

urllib.request.install_opener(opener)

j=urllib.request.urlopen(url="https://google.com")

k=j.read()

print(k)
...