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

如何用Python向组织受限的Google表单发送认证POST请求?

解决组织受限Google表单的Python自动提交授权问题

核心逻辑

组织受限的Google表单要求请求携带有效的Google组织身份凭证,仅靠手动加token无法通过验证,必须通过OAuth2流程获取绑定组织账号的会话,再用该会话提交表单。

步骤1:配置Google Cloud OAuth2客户端

  • 登录Google Cloud控制台,创建新项目,搜索启用「Google Identity OAuth2 API」(默认可能已启用)
  • 进入「API和服务」→「凭据」,创建「OAuth 2.0 客户端ID」,应用类型选择「桌面应用」
  • 下载客户端配置文件(命名为credentials.json),存到Python项目目录

步骤2:安装依赖库

执行命令安装所需工具:

pip install google-auth google-auth-oauthlib google-auth-httplib2 requests

步骤3:编写认证+提交代码

通过OAuth2获取认证会话,再用该会话发送表单提交请求:

import requests
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import pickle
import os

# OAuth2权限范围,需包含用户身份信息
SCOPES = ['openid', 'https://www.googleapis.com/auth/userinfo.email']
# 替换为你的表单提交URL(带/formResponse路径)
FORM_SUBMIT_URL = 'https://docs.google.com/forms/d/e/XXXXXXX/formResponse'

def get_auth_session():
    creds = None
    # 加载已保存的令牌(如果存在)
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token_file:
            creds = pickle.load(token_file)
    # 刷新或重新获取令牌
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # 保存令牌供后续使用
        with open('token.pickle', 'wb') as token_file:
            pickle.dump(creds, token_file)
    
    # 创建带认证信息的会话
    session = requests.Session()
    # 触发Google身份验证会话绑定
    session.get('https://accounts.google.com/o/oauth2/auth', params={'access_token': creds.token})
    return session

def submit_restricted_form(session):
    # 替换为你的表单字段(从表单源码中提取entry.开头的name属性)
    form_data = {
        'entry.123456': '测试内容1',
        'entry.789012': '测试内容2'
    }
    response = session.post(FORM_SUBMIT_URL, data=form_data)
    if response.status_code == 200:
        print("表单提交成功")
    else:
        print(f"提交失败,状态码:{response.status_code},响应:{response.text}")

if __name__ == '__main__':
    auth_session = get_auth_session()
    submit_restricted_form(auth_session)

关键注意事项

  • 表单字段获取:打开目标表单,查看页面源码,搜索entry.开头的name属性,这些就是提交时需要的键名
  • 首次运行:会弹出浏览器窗口,要求用@xxxxx.com的组织账号登录授权,授权后令牌会保存到token.pickle,后续运行无需重复登录
  • 令牌管理:令牌过期后会自动刷新,无需手动操作
  • 权限验证:确保使用的账号属于目标组织域名,且已被授权访问该表单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:15:05