为什么我不能让Python的urlopen()方法在Windows上运行?

时间:2010-05-27 18:15:13

标签: python urllib

为什么这个简单的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方法。

5 个答案:

答案 0 :(得分:4)

您的代码不是问题所在。

您的IE中是否有任何代理设置?

这表示urllib.urlopen的python文档:
    “”“
    在Windows环境中,如果未设置代理环境变量,则     代理设置是从注册表的Internet设置获得的     节。
    “”“

答案 1 :(得分:3)

如果可以更改某些代码行,请尝试使用urllib2。以秒为单位设置超时参数

例如:

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

此处连接持续时间较长。因此,例如,如果您正在读取太大的XML文件,则会避免不完整的读取。

如果网络连接速度很慢或突然中断,上述代码将永远无法运行。

答案 2 :(得分:1)

如果您有wireshark,请检查发送的内容以及是否有任何回复。如果您可以看到正在发送的GET请求,它将帮助您调试问题。

我还记得有类似这样的问题一次,我做的是刷新我的DNS缓存

(ipconfig / flushdns)并重新启动。它解决了我的问题。尝试我猜不会有什么坏处。

答案 3 :(得分:0)

对于python 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)

答案 4 :(得分:0)

您的代码是正确的

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

但很可能是你的网络有问题或者你没有设置 dns 正确。

您可以使用 urllib 的请求库。