如何用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
相关产品推荐
相关产品推荐

