You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google OAuth2 Python使用requests认证code参数缺失问题咨询

问题解答

关于code参数的说明

你当前报错是因为code参数留空导致的,这个参数是Google OAuth2 授权码模式下的临时授权码,获取流程如下:

  • 你需要先构造Google授权页面URL,引导用户在浏览器中打开该地址,登录Google账号并同意你的应用申请的权限
  • 用户同意授权后,Google会自动重定向到你预先配置的redirect_uri,并在重定向URL的查询参数中附带code值,这个值就是你需要填入请求中的code参数,注意该授权码只能使用一次,且有效期非常短。

原生requests实现注意事项

你的现有代码有两个可优化的点:

  1. 不要硬编码请求头中的Cookie字段,该字段为浏览器临时生成的会话凭证,固定写入会导致请求失效,请求令牌的接口不需要手动传入Cookie
  2. 不推荐手动拼接表单字符串,可以直接用字典传参,requests会自动完成URL编码,避免拼写错误,示例如下:
import requests

url = "https://accounts.google.com/o/oauth2/token"
# 此处替换为你实际获取到的授权码
auth_code = "用户授权后获取到的code值"
payload = {
    "grant_type": "authorization_code",
    "client_secret": "你的客户端密钥",
    "client_id": "你的客户端ID",
    "redirect_uri": "https://pushsistemas.com.br/",
    "code": auth_code
}
headers = {
    'content-type': 'application/x-www-form-urlencoded'
}
response = requests.post(url, headers=headers, data=payload)
print(response.json())

请求成功后你会拿到access_token和refresh_token,后续调用API时在请求头中携带Authorization: Bearer <access_token>即可。

官方推荐实现方案(使用Google官方SDK)

更推荐使用Google官方提供的认证库完成流程,不需要自己处理授权、令牌刷新等逻辑,使用步骤如下:

  1. 安装依赖库
pip install google-auth google-auth-oauthlib google-api-python-client
  1. 示例代码
from google_auth_oauthlib.flow import Flow

# 替换为你自己的API权限范围
SCOPES = ['https://www.googleapis.com/auth/calendar']
# 替换为你的客户端配置,也可以直接从Google Cloud控制台下载json配置文件读取
CLIENT_CONFIG = {
    "web": {
        "client_id": "你的客户端ID",
        "client_secret": "你的客户端密钥",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "redirect_uris": ["https://pushsistemas.com.br/"]
    }
}

# 初始化授权流
flow = Flow.from_client_config(CLIENT_CONFIG, scopes=SCOPES)
flow.redirect_uri = CLIENT_CONFIG['web']['redirect_uris'][0]

# 生成授权URL,引导用户访问
authorization_url, state = flow.authorization_url(access_type='offline', include_granted_scopes='true')
print(f"请访问该地址完成授权:{authorization_url}")

# 用户授权后,将重定向后的完整回调URL传入即可自动兑换令牌
callback_response_url = "用户授权后浏览器地址栏的完整URL"
flow.fetch_token(authorization_response=callback_response_url)

# 获取凭证后即可直接调用对应API
credentials = flow.credentials
print(f"Access Token: {credentials.token}")
print(f"Refresh Token: {credentials.refresh_token}")

内容的提问来源于stack exchange,提问作者Adilmar Coelho Dantas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:57:01