Python 当我尝试连接Box.com';s API

Python 当我尝试连接Box.com';s API,python,rauth,Python,Rauth,这是我用来连接到Box的代码,但我无法让Box\u存储。让\u auth\u会话(data=data)工作。 从rauth导入OAuth2Service box_storage = OAuth2Service( name='Box', client_id=CLIENT_ID, client_secr

这是我用来连接到Box的代码,但我无法让Box\u存储。让\u auth\u会话(data=data)工作。 从rauth导入OAuth2Service

    box_storage = OAuth2Service(
                                name='Box',
                                client_id=CLIENT_ID,
                                client_secret=CLIENT_SECRET,
                                authorize_url='https://www.box.com/api/oauth2/authorize',
                                access_token_url='https://www.box.com/api/oauth2/token',
                                base_url='https://www.box.com/'
                                )

    redirect_uri = 'http://127.0.0.1'

    params = {          
              'redirect_uri': redirect_uri,
              'response_type': 'code',
              'state': 'good'          
              }
    url = box_storage.get_authorize_url(**params)

    data = {'code': 'foobar',
            'grant_type': 'authorization_code',
            'redirect_uri': redirect_uri}
    session = box_storage.get_auth_session(data=data)
这是我得到的错误:

    Traceback (most recent call last):
      File "C:\Users\rushd\Documents\Aptana Studio 3 Workspace\practice\box.py", line 24, in <module>
        session = box_storage.get_auth_session(data=data)
      File "C:\Users\rushd\Envs\practice\lib\site-packages\rauth\service.py", line 533, in get_auth_session
        return self.get_session(self.get_access_token(method, **kwargs))
      File "C:\Users\rushd\Envs\practice\lib\site-packages\rauth\service.py", line 519, in get_access_token
        access_token, = process_token_request(r, decoder, key)
      File "C:\Users\rushd\Envs\practice\lib\site-packages\rauth\service.py", line 24, in process_token_request
        raise KeyError(PROCESS_TOKEN_ERROR.format(key=bad_key, raw=r.content))
    KeyError: 'Decoder failed to handle access_token with data as returned by provider. A different decoder may be needed. Provider returned: {"error":"invalid_grant","error_description":"Auth code doesn\'t exist or is invalid for the client"}'
回溯(最近一次呼叫最后一次):
文件“C:\Users\rushd\Documents\Aptana Studio 3 Workspace\practice\box.py”,第24行,在
session=box\u storage.get\u auth\u session(数据=数据)
文件“C:\Users\rushd\Envs\practice\lib\site packages\rauth\service.py”,第533行,在get\u auth\u会话中
返回self.get_会话(self.get_访问_令牌(方法,**kwargs))
文件“C:\Users\rushd\Envs\practice\lib\site packages\rauth\service.py”,第519行,在get\u access\u令牌中
访问令牌,=处理令牌请求(r、解码器、密钥)
文件“C:\Users\rushd\Envs\practice\lib\site packages\rauth\service.py”,第24行,进程中\u令牌\u请求
raise KeyError(进程\u令牌\u错误.format(key=bad\u key,raw=r.content))
KeyError:'解码器无法使用提供程序返回的数据处理access_令牌。可能需要不同的解码器。提供程序返回:{“error”:“invalid_grant”,“error_description”:“身份验证代码不存在或对客户端无效”}”

当我调用get_auth_session时,我很难找出为什么会出现这个错误。可能是什么?

我想出来了。我所做的只是将解码器更改为json.loads。比如说,

session = box_storage.get_auth_session(data=data, decoder=json.loads)
编辑 对于Python3,必须首先解码字节响应。您可以通过向其传递自定义解码器来执行此操作:

import json

def new_decoder(payload):
    return json.loads(payload.decode('utf-8'))

session = box_storage.get_auth_session(data=data, decoder=new_decoder)

当我添加解码器时,我得到“JSON对象必须是str,而不是‘bytes’”。您没有收到相同的错误吗?您传递到
新\u解码器
函数的有效负载来自什么?