Google Sheets变更触发脚本调用Python接口时请求错误如何修复?
解决Bad Request错误的具体方案
1. 对齐请求方法
先检查Flask路由的请求方法设置,比如你的Python函数如果用了@app.route('/on-edit', methods=['POST']),那Google Sheets脚本里必须明确指定POST方法,不能用默认的GET请求。
Sheets脚本里要这么写:
var payload = { /* 你的数据,比如从表格取到的内容 */ }; var options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) }; UrlFetchApp.fetch('http://127.0.0.1:5000/on-edit', options);
2. 匹配数据格式
- 如果Flask端用
request.get_json()解析数据,Sheets脚本必须把数据转成JSON字符串,同时设置contentType: 'application/json',否则Flask无法识别请求体。 - 如果Flask端用
request.form获取表单数据,那Sheets脚本的payload直接传键值对,contentType设为application/x-www-form-urlencoded(或省略,默认会用这个格式)。
3. 检查Flask端的接收逻辑
确保你的Python函数正确处理请求数据,比如:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/on-edit', methods=['POST']) def on_edit(): # 尝试解析JSON数据 data = request.get_json() if not data: return jsonify({"error": "未收到合法的JSON数据"}), 400 # 检查必要参数是否存在 if 'required_key' not in data: return jsonify({"error": "缺少必填参数"}), 400 # 后续处理逻辑 return jsonify({"status": "success"}), 200 if __name__ == '__main__': app.run(debug=True)
开启debug=True后,Flask会输出详细的错误日志,直接帮你定位问题。
4. 先本地测试接口
用curl或Postman先单独测试Flask接口,确认接口本身没问题:
curl -X POST -H "Content-Type: application/json" -d '{"test_key": "test_value"}' http://127.0.0.1:5000/on-edit
如果这个测试返回正常,问题就出在Sheets脚本的请求上;如果测试也报错,先修复Flask端的代码。
5. 排查跨域(如果后续部署)
如果之后要把Flask应用部署到公网,还需要处理跨域问题,本地测试127.0.0.1一般不会有这个问题,但可以提前用flask-cors库解决:
from flask_cors import CORS CORS(app)
内容的提问来源于stack exchange,提问作者Afonso Solano
相关产品推荐
相关产品推荐

