请求Reddit OAuth2令牌时出现Bad Request 400错误
解决Reddit OAuth2获取Access Token时的400错误
以下是几个最可能导致你遇到"Bad Request"错误的原因及对应解决方法:
Authorization头编码错误
Authorization: Basic后面的内容必须是客户端ID:客户端密钥的Base64编码结果,注意:- 编码时不要包含任何空格或换行符,可用命令
echo -n "client_id:client_secret" | base64生成正确编码 - 如果你创建的是脚本类型(script)应用,客户端密钥在应用详情页的"secret"字段,不要和客户端ID混淆
- 编码时不要包含任何空格或换行符,可用命令
redirect_uri完全不一致
获取授权码(code)时使用的redirect_uri必须和兑换token时的完全匹配,包括末尾的斜杠、端口号、协议(http/https)。比如你这里用了http://localhost:1410/,那发起授权请求时的redirect_uri也得一模一样,不能少斜杠或者多额外参数。授权码(code)无效
Reddit的授权码只能使用一次,且有效期仅约10分钟。如果code已经被用过、超时,或者复制时带了多余的空格/字符,都会触发400错误,需要重新从授权端点获取新的code。User-Agent不符合要求
Reddit对User-Agent有严格限制,不能用占位符或通用值,必须是能标识你应用的格式,比如你的应用名/版本 (u/你的Reddit用户名),例如RedditMessenger/1.0 (u/JohnDoe)。请求参数拼写错误
检查所有表单参数:确保grant_type的值是authorization_code,code字段没有拼写错误,参数名没有打错(比如不要写成code_或者grant-type)。
修正后的curl请求示例(替换为你的实际值):
curl --location --request POST 'https://www.reddit.com/api/v1/access_token' \ --header 'User-Agent: RedditMessenger/1.0 (u/your_reddit_username)' \ --header 'Authorization: Basic dXNlcl9pZDpzZWNyZXQ=' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=authorization_code' \ --data-urlencode 'code=abc123xyz' \ --data-urlencode 'redirect_uri=http://localhost:1410/'
内容的提问来源于stack exchange,提问作者Wahiduzzaman Khan
相关产品推荐
相关产品推荐

