我被要求处理一个外部restapi(实际上是Zendesk的),它的凭证需要格式化为{email}/token:{security_token}
——一个单独的值,而不是通常的用户名/密码对。我尝试使用Pythonrequests
模块来完成这个任务,因为它是Python的,不会对我的大脑造成太大的伤害,但是我不确定如何格式化身份验证凭证。Zendesk文档只提供了使用curl
的访问示例,这是我不熟悉的。在
下面是我当前如何将requests.auth.AuthBase
子类:
class ZDTokenAuth(requests.auth.AuthBase):
def __init__(self,username,token):
self.username = username
self.token = token
def __call__(self,r):
auth_string = self.username + "/token:" + self.token
auth_string = auth_string.encode('utf-8')
r.headers['Authorization'] = base64.b64encode(auth_string)
return r
我不确定是否需要各种编码,但这就是为什么有人在github(https://github.com/skipjac/Zendesk-python-api/blob/master/zendesk-ticket-delete.py)上这样做的,为什么不呢。当然,我也试过不用编码的方法——结果是一样的。在
下面是我用来测试这个的类和方法:
^{pr2}$这叫做:
credentials = ZDTokenAuth(zd_username,zd_apitoken)
zd = ZDStats(credentials)
users = zd.testCredentials()
print(users.status_code)
print(users.text)
我返回的状态代码是401
,文本只是{"error":"Couldn't authenticate you."}
。很明显我做错了什么,但我不认为我知道的足够多,知道我做错了什么,如果这有道理的话。有什么想法吗?在
你缺少的是身份验证类型。您的
Authorization
头应该这样创建:还可以通过以下方法实现与
^{pr2}$auth
参数相同的元组传递:相关问题 更多 >
编程相关推荐