getaddrinfo 无法解析主机

2 投票
1 回答
2376 浏览
提问于 2025-04-16 23:40

我遇到了一个奇怪的问题。我有一个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()

撰写回答