我一直在問到應對外部REST API(的Zendesk的,其實)的Python 3.2.2的要求「模塊和API令牌其憑據需要被格式化爲{email}/token:{security_token}
- 一個值,而比通常的用戶名/密碼對。我試圖使用Python requests
模塊完成這個任務,因爲它是Python的,並且不傷害我的大腦還算可以,但我不知道如何格式化認證證書。該文件的Zendesk只使用curl
,這我不熟悉可以訪問的例子。的Zendesk:驗證使用
以下是我目前有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),所以爲什麼不呢?我已經嘗試過,沒有編碼,當然 - 相同的結果。
這裏的類和方法,我用來測試:
class ZDStats(object):
api_base = "https://mycompany.zendesk.com/api/v2/"
def __init__(self,zd_auth):
self.zd_auth = zd_auth # this is assumed to be a ZDTokenAuth object
def testCredentials(self):
zd_users_url = self.api_base + "users.json"
zdreq = requests.get(zd_users_url, auth=self.zdauth)
return zdreq
這就是所謂的有:
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."}
。顯然,我在這裏做得不對,但我不認爲我非常清楚,知道什麼是我做錯了,如果是有道理的。有任何想法嗎?
這做到了,尤其是,只需追加'「/令牌「'對基本的HTTP認證元組中的用戶名完美工作。謝謝你的幫助! – Kudzu