2013-08-29 133 views
1

我正在爲一個網站編寫自動化腳本。但是當我打開這個網站時,它有一個登錄服務器,它要求輸入用戶名和密碼,以便通過認證來打開網站。 我有那個授權細節。 authentication that is needed機械化HTTP登錄

所以如何與機械化的幫助下打開此wesite在Python

import urllib 
import re 
import mechanize 

br = mechanize.Browser() 
response = br.open("http://ab/cabs"); 
print response.geturl() 
print response.read() 

,但它給這個錯誤 httperror_seek_wrapper:HTTP錯誤401:需要授權

我應該怎麼加?

回答

1
from base64 import b64encode 
import mechanize 

url = 'http://192.168.3.5/table.js' 
username = 'admin' 
password = 'password' 

# I have had to add a carriage return ('%s:%s\n'), but 
# you may not have to. 
b64login = b64encode('%s:%s' % (username, password)) 

br = mechanize.Browser() 

# # I needed to change to Mozilla for mine, but most do not 
# br.addheaders= [('User-agent', 'Mozilla/5.0')] 

br.addheaders.append( 
    ('Authorization', 'Basic %s' % b64login) 
) 

br.open(url) 
r = br.response() 
data = r.read() 

print data 

也許沒有嘗試,這也可以工作:

import urllib 
import re 
import mechanize 

br = mechanize.Browser() 
response = br.open("http://USERNAME:[email protected]/cabs"); 
print response.geturl() 
print response.read(

+0

哎@kyllopardium,第一種方法在我的情況下工作。感謝人們的快速回復。我也很好奇第二個,但我的密碼也有@。那麼在那種情況下如何使用第二種解決方案..? – RATHI

+0

我不確定這會起作用,但您可以嘗試:response = br.open(「http:// USERN \ @ME:PASSWORD @ ab/cabs」); 記住在每個特殊字符前加反斜線「\」。 但我強烈建議堅持第一種方法,因爲它更通用。 (和base64將確保你不會有任何類型的密碼的問題) – Mansueli

0

你沒有提供的用戶名和密碼

br.add_password("http://ab/cabs", "username", "pswd") 
+0

它也給出了同樣的錯誤.. – RATHI