2010-09-13 126 views
5

我有以下簡單的Python代碼,使一個簡單的POST請求到REST服務 -如何將基本身份驗證添加到Python REST請求?

params= { "param1" : param1, 
      "param2" : param2, 
      "param3" : param3 } 
xmlResults = urllib.urlopen(MY_APP_PATH, urllib.urlencode(params)).read() 
results = MyResponseParser.parse(xmlResults) 

的問題是,該URL用來調用REST服務現在需要基本身份驗證(用戶名和密碼)。如何儘可能簡單地將用戶名和密碼/基本身份驗證合併到此代碼中?

+0

難道它不會傳遞所需參數作爲'params'字典的一部分嗎?或者您的目標服務是否要求您再次進行明確的呼叫以進行身份​​驗證? – 2010-09-13 16:31:09

回答

7

如果基本的身份驗證= HTTP驗證,使用此:

import urllib 
import urllib2 

username = 'foo' 
password = 'bar' 

passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, MY_APP_PATH, username, password) 
authhandler = urllib2.HTTPBasicAuthHandler(passman) 
opener = urllib2.build_opener(authhandler) 
urllib2.install_opener(opener) 

params= { "param1" : param1, 
      "param2" : param2, 
      "param3" : param3 } 

xmlResults = urllib2.urlopen(MY_APP_PATH, urllib.urlencode(params)).read() 
results = MyResponseParser.parse(xmlResults) 

如果沒有,使用mechanizecookielib進行額外請求登錄但是,如果你訪問該服務有一個XML API,這個API當然也包括auth。請使用requests庫!它在一次通話中提供了上述所有內容。

+0

謝謝!這很完美! – froadie 2010-09-13 19:41:32

1

你可能想要一個圖書館來抽象出一些細節。我以前用restkit效果很好。它處理HTTP認證。