Python urlib2.urlopen can';t使用我的普通DNS服务器查找主机名;挖等可以

Python urlib2.urlopen can';t使用我的普通DNS服务器查找主机名;挖等可以,python,dns,Python,Dns,我正在尝试解决urllib2.urlopen的问题。它似乎无法使用我的常规DNS服务器。下面是几次尝试打开各种URL的结果,第一次使用谷歌公共DNS(8.8.8.8),第二次使用我的路由器。gridley在my/etc/hosts文件中定义 Python 2.7.2 (default, Jun 29 2011, 11:17:09) [GCC 4.6.1] on linux2 >>> import urllib2 >>> urllib2.urlopen("ht

我正在尝试解决urllib2.urlopen的问题。它似乎无法使用我的常规DNS服务器。下面是几次尝试打开各种URL的结果,第一次使用谷歌公共DNS(8.8.8.8),第二次使用我的路由器。gridley在my/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
Python 2.7.2(默认,2011年6月29日,11:17:09)
[GCC 4.6.1]关于linux2
>>>导入urllib2
>>>urllib2.urlopen(“http://gridley")
>>>urllib2.urlopen(“http://google.com")
Python 2.7.2(默认值,2011年6月29日,11:17:09)
[GCC 4.6.1]关于linux2
>>>导入urllib2
>>>urllib2.urlopen(“http://gridley")
>>>urllib2.urlopen(“http://google.com")
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/urllib2.py”,第126行,在urlopen中
return\u opener.open(url、数据、超时)
文件“/usr/lib/python2.7/urllib2.py”,第394行,打开
响应=自身打开(请求,数据)
文件“/usr/lib/python2.7/urllib2.py”,第412行,打开
"开放",
文件“/usr/lib/python2.7/urllib2.py”,第372行,在调用链中
结果=func(*args)
http_open中的文件“/usr/lib/python2.7/urllib2.py”,第1199行
返回self.do_open(httplib.HTTPConnection,req)
文件“/usr/lib/python2.7/urllib2.py”,第1174行,打开
引发URL错误(err)

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

键入时:

urllib2.urlopen("http://google.com")
您的操作系统可能会检查多个来源。在Linux系统上,检查的内容由
/etc/nsswitch.conf
中的
hosts
项控制。您可以使用
getent
工具检查主机名的外观,其方式与
urlopen
的操作类似:

getent hosts google.com
您的问题没有提到您正在使用的操作系统,也没有明确说明在第一个示例和第二个示例之间更改了什么(您是否编辑了文件?是否在首选项对话框中更改了设置?)


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

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

键入时:

urllib2.urlopen("http://google.com")
您的操作系统可能会检查多个来源。在Linux系统上,检查的内容由
/etc/nsswitch.conf
中的
hosts
项控制。您可以使用
getent
工具检查主机名的外观,其方式与
urlopen
的操作类似:

getent hosts google.com
您的问题没有提到您正在使用的操作系统,也没有明确说明在第一个示例和第二个示例之间更改了什么(您是否编辑了文件?是否在首选项对话框中更改了设置?)

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