You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

调用Google OAuth API获取Token时遭遇404错误求助

解决Google OAuth Token请求404/400错误的方案

你遇到的问题其实很典型,我来一步步帮你拆解解决:

首先,404错误的核心原因:请求URL完全错误

你用的https://googleapis.com/oauth/v4/token是无效的端点,Google OAuth 2.0的token兑换接口正确地址是https://oauth2.googleapis.com/token——域名和路径都错了,这才导致返回谷歌的标准404页面。

修正后的正确代码

不用手动拼接参数字符串,requests库传字典给data参数会自动处理application/x-www-form-urlencoded的编码,这才是最稳妥的方式:

import requests

# 替换成你的实际参数
auth_code = "4/A-------------------------- ... ------------------------------------fGE"
client_id = "2-------------------------------------------0.apps.googleusercontent.com"
client_secret = "5----------------------p"
redirect_uri = "https://localhost"

data = {
    "code": auth_code,
    "client_id": client_id,
    "client_secret": client_secret,
    "redirect_uri": redirect_uri,
    "grant_type": "authorization_code"
}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
# 重点:使用正确的Token端点URL
r = requests.post("https://oauth2.googleapis.com/token", data=data, headers=headers)

# 查看响应结果
print(r.status_code)
print(r.json())

关于你后来遇到的400错误,还要注意这几点

如果修正URL后还是返回400,大概率是参数不匹配:

  • redirect_uri必须完全一致:你在获取授权码时用的redirect_uri,和这里传的必须丝毫不差——包括结尾的斜杠(比如授权时是https://localhost/,这里就不能写成https://localhost
  • 授权码不能有多余字符:你提供的code里带了#,这很可能是浏览器回调时截断前的残留,实际有效的授权码应该是#之前的部分,要确保你传递的是完整且正确的授权码
  • 授权码过期:Google的授权码有效期只有10分钟左右,如果间隔太久才去兑换,会直接返回400
  • 参数拼写错误:确认grant_typeauthorization_code,没有拼写错误;client_id和client_secret要和Google Cloud控制台里的完全一致,不要多空格或少字符

额外提醒

永远不要手动拼接表单参数字符串,很容易因为特殊字符(比如client_secret里的符号)编码错误导致请求失败,requests的字典传参方式已经帮你处理了所有编码问题,直接用就好。

内容的提问来源于stack exchange,提问作者theParanoidAndroid

火山引擎 最新活动