2011-09-19 52 views
1

我想解决与urllib2.urlopen问题。它似乎无法使用我的常规DNS服务器。以下是多次尝试打开各种网址的结果,首先使用Google公共DNS(8.8.8.8),然后使用我的路由器。 gridley在我的/ etc/hosts文件中定义。urllib2.urlopen无法使用我的普通DNS服务器查找主机名;挖等可以

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 

然而,查询google.com与挖表明,它绝对应该工作:

; <<>> DiG 9.8.1 <<>> google.com 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44377 
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0 

;; QUESTION SECTION: 
;google.com.   IN A 

;; ANSWER SECTION: 
google.com.  190 IN A 74.125.225.83 
google.com.  190 IN A 74.125.225.81 
google.com.  190 IN A 74.125.225.82 
google.com.  190 IN A 74.125.225.80 
google.com.  190 IN A 74.125.225.84 

;; Query time: 23 msec 
;; SERVER: 192.168.7.254#53(192.168.7.254) 
;; WHEN: Sun Sep 18 19:46:12 2011 
;; MSG SIZE rcvd: 108 

的IPv6带来了一些其他的问题,但它是完全关闭了,所以不能吧。到底他妈发生了什么?

回答

1

这不完全是一个答案......但请注意,使用不会像查找主机名一样,如urlopen。 严格来说是一个DNS查询工具,而您的系统可能被配置为在多个来源(本地主机文件,NIS,LDAP等)中查找主机信息。

如果键入:

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

你的工作可以检查几个来源。在Linux系统上,检查的内容由​​中的hosts条目控制。你可以使用getent工具来检查主机名看起来类似于urlopen的方式做:

getent hosts google.com 

您的问题并没有提到你使用什么操作系统,也没有做出明确之间到底是什么改变第一个和第二个例子(你是否编辑过一个文件?在首选项对话框中改变一个设置?)​​。

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

相关问题