Google Apps Script调用Reddit API获取access token报400错误
400错误修复方案
你换access token返回400是两个明确的参数错误导致的:
- 授权码传错了:回调URL里code参数末尾的
#_是Google Apps Script自动追加的URL片段标记,不属于Reddit返回的授权码内容。你现在换token时把#_一起拼到code参数里提交,Reddit校验授权码失败直接返回400。实际有效授权码是#前面的部分,也就是你这次请求里的m0PsSaLd1kKVZs7jymk1Qn69hXsTQw,把后面的#_删掉再传。 - User-Agent不符合规则:Reddit API对请求的User-Agent有明确格式要求,你现在传的
username属于无效UA,会被接口拦截。合法UA格式为<运行平台>:<应用名称>:<版本号> (by /u/<你的Reddit账号名>),比如你这个场景可以填google-apps-script:Reporting:v1.0 (by /u/你的Reddit用户名)。
修正后的curl请求示例
curl -X POST https://www.reddit.com/api/v1/access_token \ -H 'content-type: application/x-www-form-urlencoded' \ -A 'google-apps-script:Reporting:v1.0 (by /u/你的Reddit用户名)' \ -u '你的client_id:你的client_secret' \ -d 'grant_type=authorization_code&code=m0PsSaLd1kKVZs7jymk1Qn69hXsTQw&redirect_uri=https%3A%2F%2Fscript.google.com%2Fmacros%2Fd%2F1Nh3AKooeG8XH4rSTvEWLTf5l3Sgo3nPgK01qiusSany43fFNaUgg2q6b%2Fusercallback'
其他避坑点
- Reddit应用后台配置的回调地址必须和请求里的
redirect_uri参数完全一致,大小写、路径、斜杠都不能有差异,否则会报校验错误 - 授权码有效期只有10分钟,且只能使用一次,过期、重复使用都会返回400
- web app类型应用必须走authorization_code授权流程,不要混用script类型的password授权模式
内容的提问来源于stack exchange,提问作者Code Guy
相关产品推荐
相关产品推荐

