2014-03-13 23 views
0

我正在嘗試獲取請求正確的用戶代理和基本身份驗證的站點。urllib2 - 設置多個頭字段

URL = 'http://localhost'           
    Creds = base64.encodestring('user:password')          
    request = urllib2.Request(url=URL)            
    request.addheaders = [('User-Agent', 'Mozilla/6.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205  Firefox/27.0 Iceweasel/25.3.0'), ('Authorization', 'Basic %s' % Creds)]   
    Opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1))    
    Response = Opener.open(request).read()          
    print Response 

我很困惑「的原因,如果我只是用request.add_header(富)加一個標題它的作品,我可以看到的HttpHandler輸出的調試。但是,如果我開始設置多個標題字段,我只需返回沒有調試信息的結果。

回答

2
>>> import base64 
>>> base64.encodestring('user:password') 
'dXNlcjpwYXNzd29yZA==\n' 

注意換行符在最後。這可能會導致標題提前結束。要修復它,用b64encode()代替:

>>> base64.b64encode('user:password') 
'dXNlcjpwYXNzd29yZA==' 

另一個問題是request.addheaders,使用opener.addheaders或​​代替:

#/usr/bin/env python 
import urllib2 
import base64 

url = 'http://localhost' 
creds = base64.b64encode('user:password') 
request = urllib2.Request(url) 
request.add_header('Authorization', 'Basic ' + creds) 
request.add_header('User-Agent', 
        'Mozilla/6.0 (X11; Linux x86_64; rv:24.0) ' 
        'Gecko/20140205  Firefox/27.0 Iceweasel/25.3.0') 
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1)) 
content = opener.open(request).read() 
print content 
+0

非常感謝! :) –

相關問題