【问题标题】:dropbox.rest.ErrorResponse: [400] 'invalid_grant'dropbox.rest.ErrorResponse: [400] 'invalid_grant'
【发布时间】:2016-05-09 07:08:53
【问题描述】:

我是 Python 新手,开始尝试访问不同的 API,现在我开始使用 Dropbox API。 但是当我尝试访问自己的帐户时,我获得了“invalid_grant”访问权限。

import dropbox
app_key = 'AAAA'
app_secret = 'BBBB'

flow = dropbox.client.DropboxOAuth2FlowNoRedirect(app_key, app_secret)
authorize_url = flow.start()

print ('1. Go to: ' + authorize_url)
print ('2. Click "Allow" (you might have to log in first)')
print ('3. Copy the authorization code.')
code = 'CCCC'

access_token, user_id = flow.finish(code)

当我运行这个脚本时,我得到了以下输出。

Traceback(最近一次调用最后一次): 文件“PATH/dropboxdownload.py”,第 14 行,在 access_token, user_id = flow.finish(code) 文件“PATH\Python35-32\lib\site-packages\dropbox-2.2.0-py3.5.egg\dropbox\client.py”,第 1398 行,完成 返回self._finish(代码,无) 文件“PATH\Python35-32\lib\site-packages\dropbox-2.2.0-py3.5.egg\dropbox\client.py”,第 1265 行,在 _finish 响应 = self.rest_client.POST(url, params=params) 文件“PATH\Python35-32\lib\site-packages\dropbox-2.2.0-py3.5.egg\dropbox\rest.py”,第 316 行,在 POST 返回 cls.IMPL.POST(*n, **kw) 文件“PATH\Python35-32\lib\site-packages\dropbox-2.2.0-py3.5.egg\dropbox\rest.py”,第 254 行,在 POST post_params=params, headers=headers, raw_response=raw_response) 文件“PATH\Python35-32\lib\site-packages\dropbox-2.2.0-py3.5.egg\dropbox\rest.py”,第 227 行,在请求中 引发 ErrorResponse(r, r.read()) dropbox.rest.ErrorResponse: [400] 'invalid_grant' 进程以退出代码 1 结束

【问题讨论】:

  • 我假设 AAAA、BBBB 和 CCCC 不是真正的值,但您实际上是在硬编码代码的值吗?这确实需要成为用户从网站获得的价值。如果您已经有一个想要使用的访问令牌,那么只需跳过所有这些代码并将access_token 分配给该值并继续。
  • 嗨,没错,当我在网上公开代码时,AAAA、BBBB 和 CCCC 是假值。但实际上这只是一个测试脚本,当我最终完成查询时,我想我真的可以做我想做的事了。但是为了给你更多信息,我尝试在 Dropbox 中创建一个文件,我想每天下载一次并将其加载到我的 Tweppy Python 脚本中,这样我就可以轻松添加新的主题标签,它会自动更新我的 Tweppy过滤器。
  • 我发现了脚本的问题,但它并没有解决我的问题。我现在可以获取我的帐户详细信息,但每次运行 Python 脚本时我都需要分配一个新的授权代码。我需要一种方法,我可以每天下载一次此文件,而无需在 Dropbox 上登录并获取新的授权码。谢谢克里斯蒂安
  • 一旦您获得了访问令牌(来自此脚本或从应用程序控制台生成令牌),只需重复使用它即可。您不能重复使用授权码,只能访问令牌。

标签: python api dropbox


【解决方案1】:

我已经解决了问题,我的问题是令牌已过期。

您可以尝试使用以下代码获取详细的错误消息

try :
    access_token,user_id = flow.finish(code)
except dropbox.rest.ErrorResponse as err:
    print("this"+str(err.body))

如果你的错误是token过期,那么你需要从authorise_url去链接,然后获取新的token。

【讨论】:

    【解决方案2】:

    如果此错误仍然存​​在,请使用以下链接:

    https://www.dropbox.com/1/oauth2/authorize?response_type=code&client_id=**your ID**
    

    确保将您的 ID 添加到 client_id 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2012-10-24
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      相关资源
      最近更新 更多