ESP32通过AppScript连接Google Sheets时POST请求返回401错误排查
401错误核心就是身份验证失败,结合你的场景,从这几个关键方向排查:
1. Google Apps Script部署权限错误
这是最容易踩的坑:
- 重新部署GAS时,必须选「任何人,甚至匿名」(如果数据敏感,后续再换验证方式,先匿名跑通)
- 操作步骤:GAS界面点「部署」→「新部署」→ 类型选「Web应用」→ 执行权限选「我」→ 谁可以访问选「任何人,甚至匿名」→ 复制新生成的Web应用URL,替换ESP32代码里的旧地址
- 注意:每次修改GAS代码后,必须重新部署更新URL,旧URL直接失效
2. ESP32请求头或参数不匹配
检查你的Arduino代码:
- 确保Content-Type头正确,比如添加
client.addHeader("Content-Type", "application/x-www-form-urlencoded");,要和GAS接收的格式匹配 - 如果GAS设置了API密钥验证,需在请求头中添加
client.addHeader("Authorization", "Bearer YOUR_API_KEY");(匿名部署无需此步骤) - 确认POST的参数名和GAS里
e.parameter.xxx的名称完全一致,大小写敏感,错一个都会导致验证失败
3. Google Apps Script代码存在身份依赖
如果GAS里写了需要用户身份的代码,匿名访问直接触发401:
- 删除
Session.getActiveUser()这类依赖用户身份的代码,匿名模式下无法使用 - 提供一个正确的匿名接收数据示例:
function doPost(e) { if (!e.parameter) return ContentService.createTextOutput("No data received"); var sheet = SpreadsheetApp.openById("你的表格ID").getSheetByName("Sheet1"); sheet.appendRow([e.parameter.timestamp, e.parameter.temp]); return ContentService.createTextOutput("OK"); }
- 确认表格ID正确,且GAS已获得该表格的编辑权限(第一次打开表格时需完成授权)
4. ESP32的HTTPS证书验证问题
虽然你说已连接服务器,但证书验证失败也可能伪装成401:
- 先测试关闭证书验证:
client.setInsecure(); - 如果测试成功,说明是证书问题,需将Google的根证书导入ESP32代码
快速定位问题的方法
- 用Postman或浏览器直接发送POST请求到GAS的Web应用URL,参数和ESP32保持一致,查看返回码
- 如果Postman也返回401,问题肯定在GAS端,无需排查ESP32
- 如果Postman返回正常,再检查ESP32的请求格式、头信息、网络稳定性
内容的提问来源于stack exchange,提问作者Muhd noor halif bin tuah
相关产品推荐
相关产品推荐

