You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32通过AppScript连接Google Sheets时POST请求返回401错误排查

排查ESP32 POST Google Sheets 401 Unauthorized错误

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代码

快速定位问题的方法

  1. 用Postman或浏览器直接发送POST请求到GAS的Web应用URL,参数和ESP32保持一致,查看返回码
  2. 如果Postman也返回401,问题肯定在GAS端,无需排查ESP32
  3. 如果Postman返回正常,再检查ESP32的请求格式、头信息、网络稳定性

内容的提问来源于stack exchange,提问作者Muhd noor halif bin tuah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:23:16