Python RedditAPI和投票。不接受modhash/cookie。错误。需要用户\ u

Python RedditAPI和投票。不接受modhash/cookie。错误。需要用户\ u,python,api,reddit,Python,Api,Reddit,我正在尝试使投票API正常工作,但出现错误。error.USER\u必需。我不知道为什么,但我认为我必须以错误的方式发送modhash或会话cookie,因为登录很正常 我的代码如下所示: UP = {'user': username, 'passwd': password, 'api_type': 'json',} client = requests.session() r = client.post('http://www.reddit.com/api/login', data=UP)

我正在尝试使投票API正常工作,但出现错误。error.USER\u必需。我不知道为什么,但我认为我必须以错误的方式发送modhash或会话cookie,因为登录很正常

我的代码如下所示:

UP = {'user': username, 'passwd': password, 'api_type': 'json',}

client = requests.session()

r = client.post('http://www.reddit.com/api/login', data=UP)

j = json.loads(r.text)

mymodhash = j['json']['data']['modhash']

url = 'http://www.reddit.com/api/vote/.json'
postdata = {'id': thing, 'dir': newdir, 'uh': mymodhash}
vote = client.post(url, data=json.dumps(newdata))
错误:

{"jquery": [[0, 1, "refresh", []], [0, 2, "attr", "find"], [2, 3, "call", [".error.USER_REQUIRED"]], [3, 4, "attr", "show"], [4, 5, "call", []], [5, 6, "attr", "text"], [6, 7, "call", ["please login to do that"]], [7, 8, "attr", "end"], [8, 9, "call", []]]}

您可以将会话对象与
语句一起使用

import requests

UP = {'user': username, 'passwd': password, 'api_type': 'json'}
url_prefix = "http://www.reddit.com"
with requests.session() as client:
    client.post(url_prefix + '/login', data=UP)

    <...something else what you want...>
导入请求
UP={'user':用户名,'passwd':密码,'api_type':'json'}
url_前缀=”http://www.reddit.com"
使用requests.session()作为客户端:
client.post(url_前缀+'/login',data=UP)
要登录,您应该发布到
ssl.reddit.com
,这样您就不会以纯文本形式发布凭证。此外,还应设置用户代理

下面是对您提交的/r/redditdev进行投票的工作示例

import requests
# Login                                                                                                
client = requests.session(headers={'User-Agent': 'Requests test'})
data = {'user': 'USERNAME', 'passwd': 'PASSWORD', 'api_type': 'json'}
r = client.post('https://ssl.reddit.com/api/login', data=data)
modhash = r.json['json']['data']['modhash']

# Vote                                                                                                 
data = {'id': 't3_11mr32', 'dir': '1', 'uh': modhash, 'api_type': 'json'}
r = client.post('http://www.reddit.com/api/vote', data=data)
print r.status_code  # Should be 200                                                                   
print r.json  # Should be {}

另外,除非您真的对reddit的API如何在封面下工作感兴趣,否则我建议您使用。

我已经尝试过了,但仍然不接受登录。我也试过从你那里得到modhash,但还是拒绝了。我想我一定误解了modhash的工作原理,可能是因为我请求URL的方式而改变了。我猜也可能是cookie。什么是“用户代理”:“请求测试”?它向Reddit表明您是被标识为
请求测试的客户端。根据Reddit的API,此用户代理应该更具描述性:。还值得注意的是,Reddit的API不再正式支持第三方客户端的CookieAuth,所以您真的应该研究OAuth。