在Reddit API中请求json时出现404错误

时间:2013-06-22 18:55:51

标签: python json api reddit

我正在尝试登录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中运行。

1 个答案:

答案 0 :(得分:2)

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

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

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

此外,如果您需要将modhash传递给服务器,请在POST请求中传递的数据中执行此操作;设置client.modhash 然后将该参数传递给服务器。您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': '...', ...})