如何打印Reddit API返回的JSON响应并解决invalid_grant报错
问题原因
Reddit OAuth2接口的设计特性就是即使授权参数错误,也会返回200状态码,错误信息只会放在返回的JSON体中,你遇到的invalid_grant是授权凭证无效类错误,按以下步骤排查即可解决:
解决步骤
- 修正密码读取逻辑
你当前从pw.txt读取密码时没有去除首尾空白,大部分人保存密码文件时会不小心留下末尾换行符,导致传入的密码和实际不一致,另外原代码中pw = f.read()行缺少缩进属于语法错误,修改读取代码为:
with open('pw.txt', 'r') as f: pw = f.read().strip()
- 确认Reddit应用类型
password授权模式仅支持script类型的Reddit应用,你需要登录Reddit账号进入应用管理页,确认你创建的应用类型是script,不是web app或者installed app。 - 验证账号凭证正确性
可以先临时硬编码密码测试,排除文件读取问题:将data中的password字段直接替换为你的Reddit账号明文密码,运行后如果不再报错,说明是密码读取环节的问题。 - 排查IP问题
如果使用代理访问Reddit,部分被标记的代理IP会触发授权失败,切换为原生家庭IP重试即可。
修正后完整代码
import requests from requests.auth import HTTPBasicAuth SECRET_KEY = '替换为你的实际SECRET_KEY' CLIENT_ID = 'mb_cSXkFXaFE6Q2QrWmc2w' # 读取密码并去除首尾空白 with open('pw.txt', 'r') as f: pw = f.read().strip() data = { 'grant_type': 'password', 'username': 'brandonbann', 'password': pw } headers = {'User-Agent' : 'MyAPI/0.0.1'} res = requests.post( 'https://www.reddit.com/api/v1/access_token', auth=HTTPBasicAuth(CLIENT_ID, SECRET_KEY), data=data, headers=headers ) # 打印返回的JSON内容 print(res.json())
按以上步骤修正后就能得到你期望的access_token返回结果。
内容的提问来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

