【问题标题】:How to exchange code for access token with Reddit API如何使用 Reddit API 交换访问令牌的代码
【发布时间】:2020-11-07 03:48:54
【问题描述】:

我确信这是一个更广泛的问题,不仅适用于 Reddit,但目前我正在尝试交换用户访问令牌的代码,但我不了解如何实施以下步骤:

https://github.com/reddit-archive/reddit/wiki/OAuth2#retrieving-the-access-token

如果您没有收到错误并且状态值已检出, 然后,您可以使用代码向以下 URL 发出 POST 请求以检索您的访问令牌:

https://www.reddit.com/api/v1/access_token

在您的 POST 数据中包含以下信息(不作为 URL 的一部分)

grant_type=authorization_code&code=CODE&redirect_uri=URI

好的,所以我做的是这样的:

headers = {
     CLIENT_ID: CLIENT_SECRET,
    }
r = requests.post(
    url="https://www.reddit.com/api/v1/access_token",
    data={
        "grant_type": "authorization_code",
        "code": code,
        "redirect_uri": "http://127.0.0.1:5000/callback"
      },
    headers=headers
  )

我认为我在标头方面失败了,我收到 429 错误,并且我认为我不明白如何正确排列标头,因为它在上面的链接中没有清楚地解释。

“用户”是client_id。机密客户端的“密码”是 client_secret。非机密客户端(已安装的应用程序)的“密码”是一个空字符串。

CLIENT_IDCLIENT_SECRET 显然是变量,它们是我的 Reddit 应用开发凭据。

编辑:

我想出了这个,它很恶心,但它似乎有效

headers = {
        "User-Agent": "MyApp v1.0",
        "Authorization": "Basic " + str(base64.b64encode(str.encode(f"{CLIENT_ID}:{CLIENT_SECRET}")))[2:-1],
    }

有没有更简洁的写法?

【问题讨论】:

  • 所以我搜索了 429 错误,这是一个 Too many requests 错误。所以我在标题中添加了 User-Agent,现在我收到了 401 错误。

标签: python reddit


【解决方案1】:

最终答案,使用 Python 请求中的内置方法:

client_auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)

r = requests.post(
    url="https://www.example.com/api/v1/access_token",
    auth=client_auth,
    data={
        "grant_type": "authorization_code",
        "code": code,
        "redirect_uri": "http://127.0.0.1:5000/callback"
    },
    headers={
        "User-Agent": "MyApp v1.0",
    }
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 2017-06-09
    • 1970-01-01
    • 2021-11-27
    • 2014-05-12
    • 1970-01-01
    • 2018-04-11
    • 2021-01-10
    相关资源
    最近更新 更多