【问题标题】:Reddit API returns HTTP 403Reddit API 返回 HTTP 403
【发布时间】:2017-06-19 22:13:50
【问题描述】:

按照https://github.com/reddit/reddit/wiki/OAuth2 中描述的 OAuth2 登录流程,我到了 POST-ing 到 https://www.reddit.com/api/v1/access_token 返回如下内容的地步:

{'token_type': 'bearer', 'expires_in': 3600, 'scope': 'identity', 'access_token': '*****'}

那我做

GET  https://oauth.reddit.com/api/v1/me

有了这个标题:

Authorization: bearer *****

响应是 HTTP 403 Unauthorized。但为什么?很明显,访问令牌具有“身份”范围。还记录了 /api/v1/me 调用仅需要此范围。 (见https://www.reddit.com/dev/api/oauth#GET_api_v1_me

那么为什么我会得到 http 403?

【问题讨论】:

  • 表头格式很重要Authorization: Bearer <Token>
  • 好的,抱歉。实际上我已经用 Python 中的 dict 设置了它。它确实包含冒号。我会解决这个问题。顺便说一句,文档用所有小写字母(“bearer”而不是“Bearer”)指定它,请参阅github.com/reddit/reddit/wiki/… 的末尾
  • 嗯,现在它开始返回 403 禁止。也许它以前也回来了?我不确定。
  • @nagylzs 你解决了吗?
  • 是的,我有。却说不出哪里错了。我在代码中更改了很多东西,最终它开始起作用了。

标签: oauth2 reddit


【解决方案1】:

我遇到了与您描述的完全相同的问题。就我而言,我通过在请求标头中添加 faux 用户代理字符串解决了 403

在我的例子中,使用 C# 的 HttpClient,这样进行:

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Add("User-Agent", "MockClient/0.1 by Me");
    ...
}

【讨论】:

  • 这是我的问题的解决方案!一直在使用 Postman 但不是我自己的脚本,我想是因为 postman 会自动填写 User-Agent 标头。
  • 只是在这里说用户代理字符串是至关重要的。我正在使用 reddit "os:app:version (by username)" 推荐的字符串,但仍然被拒绝。尽管我的代理字符串刚刚开始使用,但似乎出于某种原因被列入黑名单。通过稍微更改应用名称为 app-name-with-space-sparators+"agent" 后缀的位置,它通过了 403 并开始工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 2020-12-05
  • 2015-04-14
  • 2020-12-25
  • 2017-05-08
  • 2013-07-27
相关资源
最近更新 更多