GAS脚本报错'Script function not found: doPost',求POST调用解决方案
解决方案:修复GAS WebApp "Script function not found: doPost" 错误
1. 检查并重新部署WebApp(最关键)
出现该错误最常见的原因是WebApp部署版本未包含最新的doPost函数,或使用了错误的访问链接:
- 打开
respond.gs所在的脚本项目,点击部署 > 新建部署 - 部署类型选择「Web应用」
- 执行权限:测试阶段建议选「任何人,甚至匿名」,正式环境按需调整
- 访问权限:与执行权限保持一致
- 点击「部署」,复制生成的
https://script.google.com/macros/s/xxx/exec链接,替换send.gs中的旧链接 - 注意:每次修改
doPost函数后,必须重新部署新版本,旧部署链接不会自动同步代码更新
2. 修正send.gs的请求参数
UrlFetchApp的配置有细节要求,错误参数会导致WebApp无法识别POST请求:
修改send.gs的options配置,将Content-Type替换为UrlFetchApp专用的contentType参数:
function sendPostRequest() { var data = { 'name': 'Bob Smith', 'age': 35, 'pets': ['fido', 'fluffy'] }; var headers = { "key":"hehehe" }; var options = { "headers": headers, "contentType": "application/json", // 注意是驼峰的contentType,不是Content-Type "method": "post", "payload": JSON.stringify(data), "muteHttpExceptions": true // 可选,方便查看完整错误信息 }; const response = UrlFetchApp.fetch("https://script.google.com/macros/s/<foo>/exec", options); console.log(response.getContentText()) }
3. 优化respond.gs的doPost函数(可选)
原代码本身无语法错误,可优化为更健壮的版本方便调试:
function doPost(e){ // 解析POST请求的JSON数据(如需处理请求内容) let receivedData = {}; if (e.postData && e.postData.contents) { receivedData = JSON.parse(e.postData.contents); } // 返回JSON格式响应 const responsePayload = JSON.stringify({ method: "POST", message: "hello,world", received: receivedData // 可选,返回接收的数据用于验证请求是否成功 }); return ContentService.createTextOutput(responsePayload) .setMimeType(ContentService.MimeType.JSON); }
常见误区排查
- 不要使用带
/dev后缀的测试链接,该链接仅支持脚本编辑器内测试,外部请求必须使用/exec链接 - 若WebApp设置了权限限制,需确保
send.gs的执行账号有权访问该WebApp(同账号下的脚本默认有权限) - 若请求不带有效payload,部分场景下WebApp会将请求识别为GET,从而寻找
doGet函数而非doPost
内容的提问来源于stack exchange,提问作者ten
相关产品推荐
相关产品推荐

