Почему я не могу получить метод urlopen() Python для работы в Windows?

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

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

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

Traceback (most recent call last):
  File "C:workspaceGarchUpdatesrcPractice.py", line 26, in <module>
    file = urllib.urlopen('http://www.google.com')
  File "C:Python26liburllib.py", line 87, in urlopen
    return opener.open(url)
  File "C:Python26liburllib.py", line 206, in open
    return getattr(self, name)(url)
  File "C:Python26liburllib.py", line 345, in open_http
    h.endheaders()
  File "C:Python26libhttplib.py", line 892, in endheaders
    self._send_output()
  File "C:Python26libhttplib.py", line 764, in _send_output
    self.send(msg)
  File "C:Python26libhttplib.py", line 723, in send
    self.connect()
  File "C:Python26libhttplib.py", line 704, in connect
    self.timeout)
  File "C:Python26libsocket.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 метод для правильного выполнения.

3 ответов


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

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

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


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

например:

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

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

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


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

также я помню, что у меня была аналогичная проблема, как это однажды, то, что я сделал, было очистить мой кэш dns

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