2010-09-13 127 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认证。