从WordPress调用Google Apps Script遭遇400错误求助
问题分析与解决方案
核心问题定位
- GAS执行记录有调用痕迹但无日志:请求已到达GAS,但因请求格式不合法,脚本未进入执行阶段就被拦截,因此无日志输出。
- Thrive Auto发送的
postData为{"":""}:属于无效JSON结构,GAS的doPost函数无法解析,直接返回400 Bad Request。 - curl调用返回“页面未找到”:大概率是curl命令的请求头或数据格式不符合GAS要求,与Thrive Auto的问题本质一致。
针对性解决方案
1. 修正Thrive Auto的请求配置
确保Thrive Auto的POST请求满足GAS的要求:
- 强制设置请求头
Content-Type: application/json - 发送的JSON数据必须是合法键值对结构(如
{"key": "value"}),避免空键或未正确序列化的无效格式 - 检查参数映射规则,确认所有字段都被正确赋值并序列化
2. 修复curl命令的调用格式
正确调用GAS Web App的curl命令示例:
curl -X POST \ "https://script.google.com/macros/s/你的脚本ID/exec" \ -H "Content-Type: application/json" \ -d '{"key1": "value1", "key2": "value2"}'
注意:
- 必须携带
Content-Type请求头 - JSON数据用单引号包裹,避免shell转义问题
- 确认使用的是最新的Web App部署URL,而非旧测试链接
3. 给GAS添加容错与日志捕获(可选)
修改doPost函数,增加错误捕获与日志记录,方便排查异常请求:
function doPost(e) { try { // 记录原始请求数据到Sheet SpreadsheetApp.openById("你的Sheet ID").getSheetByName("日志").appendRow([new Date(), JSON.stringify(e)]); // 校验请求数据合法性 if (!e.postData || !e.postData.contents) { return ContentService.createTextOutput(JSON.stringify({status: "error", message: "无效的请求数据"})).setMimeType(ContentService.MimeType.JSON); } const data = JSON.parse(e.postData.contents); // 后续业务逻辑... return ContentService.createTextOutput(JSON.stringify({status: "success"})).setMimeType(ContentService.MimeType.JSON); } catch (err) { // 记录错误信息 SpreadsheetApp.openById("你的Sheet ID").getSheetByName("日志").appendRow([new Date(), "错误: " + err.message]); return ContentService.createTextOutput(JSON.stringify({status: "error", message: err.message})).setMimeType(ContentService.MimeType.JSON); } }
4. 确认GAS部署配置
再次核对Web App部署设置:
- 执行权限:「以我身份执行」(确保脚本拥有访问关联资源的权限)
- 访问权限:「任何人,甚至匿名」(避免权限拦截请求)
- 部署后复制最新的URL,不要使用旧的测试链接
内容的提问来源于stack exchange,提问作者Florent
相关产品推荐
相关产品推荐

