urllib2.URLError: <urlopen错误 [Errno 11004] getaddrinfo失败>

16 投票
6 回答
80030 浏览
提问于 2025-04-16 11:58

如果我运行:

urllib2.urlopen('http://google.com')

即使我换了其他网址,我还是会遇到同样的错误。

我很确定我的电脑或路由器上没有防火墙,而且用浏览器上网一切正常。

6 个回答

2

如果问题出在网络层面,这个方法可能帮不了你,但你可以通过在httplib上设置调试级别来获取一些调试信息。试试这个:

import urllib, urllib2, httplib

url = 'http://www.mozillazine.org/atom.xml'
httplib.HTTPConnection.debuglevel = 1

print "urllib"

data = urllib.urlopen(url);

print "urllib2"

request = urllib2.Request(url)
opener = urllib2.build_opener()
feeddata = opener.open(request).read()

这个代码是直接从这里复制过来的,希望没问题: http://bytes.com/topic/python/answers/517894-getting-debug-urllib2

5

这个网站的DNS记录有点奇怪,导致Python在查找DNS时出现了问题:它找到了记录,但没有找到任何关联的IP地址。(可以用nslookup来验证一下。)所以出现了错误代码11004, WSANO_DATA

试着在网站前面加上'www.',然后再请求一次。(同样可以用nslookup来确认这次的结果是否不同。)

使用Python Requests模块时,问题基本上是一样的:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='...', port=80): 最大重试次数超过,网址:/(原因是:[Errno 11004] getaddrinfo失败)

6

我遇到的问题是,有一次安装程序在我的电脑上设置了一个环境变量http_proxy,而我其实并不需要代理。

把这个http_proxy环境变量删掉后,问题就解决了。

撰写回答