如何在Python REST请求中添加基本认证?

5 投票
2 回答
11883 浏览
提问于 2025-04-16 04:05

我有一段简单的Python代码,它用来向一个REST服务发送一个简单的请求 -

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

现在的问题是,调用这个REST服务的链接需要基本的身份验证(也就是需要用户名和密码)。我该怎么把用户名和密码加到这段代码里,尽量简单一点呢?

2 个回答

1

你可能想要一个库来简化一些细节。我之前用过restkit,效果很好。它可以处理HTTP认证。

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肯定也包含了认证的部分。

2016年更新:一定要使用 requests 库!它可以在一次调用中完成以上所有操作。

撰写回答