如何向Python REST请求添加基本身份验证?

时间:2010-09-13 16:26:51

标签: python web-services authentication rest http-post

我有以下简单的Python代码,可以向REST服务发出简单的发布请求 -

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

问题是用于调用REST服务的url现在需要基本身份验证(用户名和密码)。如何尽可能简单地将用户名和密码/基本身份验证合并到此代码中?

2 个答案:

答案 0 :(得分: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。

2016编辑:无论如何,请使用requests库!它通过一次通话提供上述所有内容。

答案 1 :(得分:1)

您可能希望库抽象出一些细节。我之前使用restkit效果很好。它处理HTTP身份验证。