Zendesk:使用python3.2.2“请求”模块和API令牌进行身份验证

2024-10-02 14:26:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我被要求处理一个外部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."}。很明显我做错了什么,但我不认为我知道的足够多,知道我做错了什么,如果这有道理的话。有什么想法吗?在


Tags: selfgithubtokenauth编码stringdefusername
1条回答
网友
1楼 · 发布于 2024-10-02 14:26:08

你缺少的是身份验证类型。您的Authorization头应该这样创建:

r.headers['Authorization'] = b"Basic " + base64.b64encode(auth_string)

还可以通过以下方法实现与auth参数相同的元组传递:

^{pr2}$

相关问题 更多 >