2011-09-19 8 views
1

私はurllib2.urlopenの問題のトラブルシューティングを試みています。私の通常のDNSサーバを利用することはできないようです。以下は、GoogleのパブリックDNS(8.8.8.8)を使用し、ルータを使用して最初にさまざまなURLを開くいくつかの試みの結果です。 gridleyは/ etc/hostsファイルに定義されています。urllib2.urlopenは、通常のDNSサーバーを使用してホスト名をルックアップすることはできません。 digなどできます

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を照会することは、間違いなく動作する必要があることを示しています。IPv6は他のいくつかの問題を引き起こし

; <<>> 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 

が、それはそれをすることはできませんので、それは、今完全にオフです。一体何が起こっているの?

答えて

1

これはまさに答えではありませんが、を使用すると、ホスト名は、たとえばurlopenと同じ方法で検索されません。 は厳密にはDNSクエリツールですが、システムは複数のソース(ローカルホストファイル、NIS、LDAPなど)のホスト情報を検索するように構成されている可能性があります。

次のように入力すると:

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

をお使いのオペレーティングは、複数のソースを確認することがあります。 Linuxシステムでは、チェックされるのはhostsのエントリによって制御され、​​になります。あなたは、ホスト名がurlopenがやっていることと同じように見えますチェックするgetentツールを使用します。

getent hosts google.com 

ご質問あなたが使っているものをOSに言及していない、またそれが間で変更明示的に正確に何を作るん最初と2番目の例(ファイルを編集しましたか?環境設定ダイアログで設定を変更しましたか?)

Linuxの場合は、変更前と変更後のresolv.confnsswitch.confを含めて、物事を診断するのに役立ちます。 Linuxを使用していない場合は、OSを指定するとより便利な回答につながる可能性があります。

関連する問題