【问题标题】:403 error while calling Reddit API.调用 Reddit API 时出现 403 错误。
【发布时间】:2013-07-04 10:32:06
【问题描述】:

我正在尝试访问用户保存的数据。它不断返回一个 403 错误,这是它的 api 端点。

http://www.reddit.com/dev/api#GET_user_{username}_saved

我非常困惑在我的标头中发送什么来使这个请求工作,而 reddit 文档根本没有提到它。帮忙?

我正在使用 Python-requests 库来执行此操作。

【问题讨论】:

  • 它会在正文中发送一些错误消息吗?
  • 什么都没有。它只是发送错误:403
  • 自己试试看:reddit.com/user{username}/saved/.json 它给出了相同的响应。
  • 尝试使用您自己的用户名...看看它是否有效...

标签: python reddit


【解决方案1】:

正如@zenpoy 已经提到的(并且您已经知道),您必须登录。因此,您应该保存cookie,作为对api/login 的有效调用的响应。我已经编写了一些代码,可以让用户登录并检索所有保存的内容:

import urllib
import urllib2
import cookielib
import json

login_url = 'https://ssl.reddit.com/api/login/'
saved_url = 'https://ssl.reddit.com/user/<username>/saved.json'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))


def login(username, passwd):
    values = {'user': username,
              'api_type': 'json',
              'passwd': passwd}

    data = urllib.urlencode(values)
    response = opener.open(login_url, data).read()

    print json.loads(response)


def retrieve_saved(username):
    url = saved_url.replace('<username>', username)
    response = opener.open(url).read()

    print json.loads(response)


login(<username>, <passwd>)
retrieve_saved(<username>)

【讨论】:

    【解决方案2】:

    参考 listingcontroller.py (here) 中 reddit 代码中的第 686 行:

        if (where in ('saved', 'hidden') and not 
            ((c.user_is_loggedin and c.user._id == vuser._id) or
              c.user_is_admin)):
            return self.abort403()
    

    您可以清楚地看到您必须以username 身份登录或成为管理员才能获得savedhidden 数据 - 否则您将获得403 error

    【讨论】:

    • 但这是一个 API 调用。我得到了登录的部分,但是为什么我不能在参数中发送用户名/密码/其他任何东西并访问 api 数据?如果不是,那它是如何调用 API 的?
    • 是的。这也是 api 调用的代码,只在末尾添加 .json.xml...
    • 是的,我知道了。但我很困惑 reddit 的 api 必须有哪些参数才能考虑到我已登录。它需要哪些标头/参数以及请求?
    猜你喜欢
    • 2017-01-04
    • 2016-10-27
    • 1970-01-01
    • 2012-02-16
    • 2020-07-14
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多