2013-07-02 3 views
2

자격 증명이 {email}/token:{security_token} - 오히려 하나의 값으로 지정되어야하는 외부 REST API (Zendesk 's)를 처리하도록 요청 받았습니다. 일반적인 사용자 이름/암호 쌍보다. Python requests 모듈을이 작업에 사용하려고합니다. Pythonic이고 내 머리를 너무 심하게 손상시키지 않으므로 인증 자격 증명의 형식을 지정하는 방법을 모르겠습니다. Zendesk 문서는 익숙하지 않은 curl을 사용한 액세스 예제 만 제공합니다. 여기Zendesk : Python 3.2.2 'requests'모듈 및 API 토큰을 사용하여 인증하기

내가 현재 서브 클래스 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."}입니다. 분명히 여기에서 뭔가 잘못하고있는 것이 분명합니다. 그러나 그것이 의미가있는 경우 잘못하고있는 것이 무엇인지 알만큼 충분히 생각하지 않습니다. 어떤 아이디어?

답변

6

누락 된 부분은 인증 유형입니다.

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

또한으로 auth 매개 변수로 튜플하여 동일한 통과를 얻을 수 있습니다 : 귀하의 Authorization 헤더는 다음과 같이 작성해야

requests.get(url, auth=(username+"/token", token)) 
+0

이이 - 특히, 단순히/토큰 "'추가했다 "기본 HTTP 인증 튜플의 사용자 이름에"완벽하게 작동했습니다. 당신의 도움을 주셔서 감사합니다! – Kudzu