urllib2.urlopen无法使用我的普通DNS服务器查找主机名;dig等可以

2024-10-01 09:34:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解决urllib2.urlopen的问题。它似乎不能利用我的常规DNS服务器。下面是几次尝试打开不同url的结果,第一次使用Google公共DNS(8.8.8.8),第二次使用我的路由器。gridley在我的/etc/hosts文件中定义。在

Python 2.7.2 (default, Jun 29 2011, 11:17:09) 
[GCC 4.6.1] on linux2
>>> import urllib2
>>> urllib2.urlopen("http://gridley")
<addinfourl at 158490988 whose fp = <socket._fileobject object at 0xb745f7ec>>
>>> urllib2.urlopen("http://google.com")
<addinfourl at 158492204 whose fp = <socket._fileobject object at 0x971842c>>

Python 2.7.2 (default, Jun 29 2011, 11:17:09) 
[GCC 4.6.1] on linux2
>>> import urllib2
>>> urllib2.urlopen("http://gridley")
<addinfourl at 154808684 whose fp = <socket._fileobject object at 0xb73997ec>>
>>> urllib2.urlopen("http://google.com")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 394, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 412, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1199, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1174, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno -5] No address associated with hostname

但是,查询谷歌dig显示它肯定会起作用:

^{pr2}$

IPv6还引发了一些其他问题,但现在已经完全关闭了,所以不可能是这样。到底是怎么回事?在


Tags: inpyhttplibusrlineopenurllib2
1条回答
网友
1楼 · 发布于 2024-10-01 09:34:01

这并不是一个确切的答案……但是请注意,使用dig查找主机名的方式与^{查找主机名的方式不同。dig严格来说是一个DNS查询工具,而您的系统可以配置为在多个源(本地主机文件、NIS、LDAP等)中查找主机信息。在

键入时:

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

您的操作可能会检查多个来源。在Linux系统上,检查的内容是由/etc/nsswitch.conf中的hosts项控制的。您可以使用getent工具检查主机名外观,方法与urlopen所做的类似:

^{pr2}$

你的问题没有提到你正在使用什么操作系统,也没有明确指出第一个和第二个例子之间发生了什么变化(你编辑了一个文件吗?在“首选项”对话框中更改设置?)。在

如果您使用的是Linux,包括您的resolv.conf在任何更改之前和之后,以及您的nsswitch.conf可能有助于诊断问题。如果您不在Linux上,指定操作系统可能会得到更有用的答案。在

相关问题 更多 >