我正在尝试使用Django Rest Framework创建一个测试:
self.api = APIClient()
self.api.credentials(HTTP_AUTHORIZATION='client_id ' + str(self.client_id) + ' client_secret ' + str(self.client_secret))
response = self.api.post(url, payload)
但是我在上面得到了这个错误:
无效的基本标头。凭据未正确base64编码。
我是否需要对标头进行base64编码?我以为这是为你完成的? 使用curl测试相同的东西没有任何问题,即
curl -X POST -d "stuff=stuff" http://RqePZpAwyyVqal9D:18288GHFRb@127.0.0.1:8000/api/test/
答案 0 :(得分:1)
事实上,你需要自己对auth字符串进行base64编码。在这种情况下,我认为它应该看起来像:
import base64
auth = 'client_id %s client_secret %s' % (base64.b64encode(self.client_id),
base64.b64encode(self.client_secret))
self.api.credentials(HTTP_AUTHORIZATION=auth)
答案 1 :(得分:1)
您永远不会指定您使用的身份验证方法类型,因此现在我假设您使用的是某种形式的OAuth(因为client_id
和client_secret
)。
发送OAuth凭据using the Authorization
header时,您必须将其作为Basic access authentication凭据发送。这意味着它们应该在发送之前以client_id:client_secret
和base64编码的形式发送。
import base64
credentials = '%s:%s' % (self.client_id, self.client_secret)
authorization = 'Basic %s' % (base64.b64encode(credentials), )
self.api = APIClient()
self.api.credentials(HTTP_AUTHORIZATION=authorization)
response = self.api.post(url, payload)