【问题标题】:404 error when requesting json in Reddit API在 Reddit API 中请求 json 时出现 404 错误
【发布时间】:2013-06-19 16:57:53
【问题描述】:

我正在尝试登录 Reddit 并获取我自己的帐户数据。

这是我的 Python 代码:

from pprint import pprint
import requests
import json
username = 'dirk_b'
password = 'willnottell'
user_pass_dict = {'user': username,
      'passwd': password,
      'api_type': 'json',
      'rem': True, }
headers = {'dirkie': '/u/dirk_b API python test', }
client = requests.session()
client.headers = headers
r = client.post(r'http://www.reddit.com/api/login', data=user_pass_dict)
j = json.loads(r.content.decode());
client.modhash = j['json']['data']['modhash']
s = client.post(r'http://www.reddit.com/api/me.json', data=user_pass_dict)
pprint(s.content)

我得到的响应是:b'{"error": 404}'

如果我在没有 .json 部分的情况下执行相同的请求。我得到一堆 HTML 代码,内容为“reddit.com:找不到页面”。所以我假设我对 URL 做错了什么。但我使用的 URL 是在 Reddit API 中指定的。

我不使用 PRAW 的原因是因为我最终希望能够在 c++ 中执行此操作,但我想确保它首先在 Python 中工作。

【问题讨论】:

  • 为什么是r.content.decode()json 库处理你的解码。 json.loads(r.content) 很好;或者,使用stream=Trueclient.post() 并使用json.load(r.raw) 直接从http 套接字读取库(如果数据被压缩,可能无法正常工作)。
  • 另外,client.modhash 是什么?这不会传递给服务器。
  • 在 3.3 中没有 .decode 就无法工作 - decode() 将其解码为 UTF-8。

标签: python json api reddit


【解决方案1】:

/api/me.json route 只接受 GET 请求:

s = client.get('http://www.reddit.com/api/me.json')

该端点没有 POST 路由,因此您将获得 404。

另外,如果您需要将modhash 传递给服务器,请在POST 请求中传递的数据中这样做;设置client.modhash not 然后将该参数传递给服务器。您从me.json GET 响应中检索 modhash:

r = client.get('http://www.reddit.com/api/me.json')
modhash = r.json()['modhash']

注意requests 的响应如何有一个.json() 方法,不需要自己使用json 模块。

然后您在 POST 请求数据中使用 modhash

client.post('http://www.reddit.com/api/updateapp', {'modhash': modhash, 'about_url': '...', ...})

【讨论】:

    猜你喜欢
    • 2018-10-28
    • 2013-02-15
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多