getaddrinfo 无法解析主机
我遇到了一个奇怪的问题。我有一个Python应用程序,当我尝试在应用程序中打开一个网址,比如 urllib2.urlopen("http://google.com", None)
,结果出现了以下错误:
IOError: [Errno socket error] [Errno 8] nodename nor servname provided, or not known
但是当我在Python命令行中做同样的事情时,它却能正常工作。无论是应用程序还是命令行,使用的都是同一个Python可执行文件。
nslookup google.com
似乎也能正常工作。我打开了wireshark(一个网络监控工具),发现当应用程序尝试打开 google.com
时,只发送了一个针对 "My-Name-MacBook-Pro.local"
的mDNS查询。然而,当命令行尝试打开 google.com
时,发送的是一个针对 "google.com"
的普通DNS查询。我发现如果我在 /etc/hosts
文件中硬编码谷歌的IP地址,那么应用程序的请求就开始正常工作了。
看起来有什么奇怪的东西在改变应用程序解析域名的方式,但我不知道是什么导致的。
我正在使用Mac OSX 10.6.7和Python 2.6。
编辑: 我没有使用代理上网。
1 个回答
1
你需要注意的是,你没有设置 HTTP_PROXY 这个环境变量,这导致了这个问题。(如果是这样的话,这个错误提示就不太友好了。你可以检查一下正确的目录,然后再试一次,比如:
import urllib
r = urlib.urlopen('http://www.google.com')
print r.read()