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

Micropython向Google Apps Script发POST请求返回400错误排查

排查MicroPython POST请求到Google Apps Script返回400错误(数据已成功写入)

核心问题分析

尽管数据已成功写入Google Sheets且GAS日志显示"success",但MicroPython端收到400(Bad Request)响应,说明问题出在请求/响应的HTTP规范匹配上,而非数据处理逻辑。以下是针对性排查步骤:

1. 检查Google Apps Script的响应输出

GAS默认的响应格式可能不符合MicroPython urequests 库的解析要求,即使数据处理成功,也会触发400错误:

  • 确保GAS函数末尾明确返回符合HTTP规范的响应,例如:
    function doPost(e) {
      // 数据处理逻辑...
      // 明确返回JSON格式的200响应
      return ContentService.createTextOutput(JSON.stringify({status: "success"}))
        .setMimeType(ContentService.MimeType.JSON)
        .setStatusCode(200);
    }
    
  • 检查GAS中是否存在未捕获的异常:即使数据写入成功,响应阶段的错误(如JSON序列化失败)会导致默认返回400。添加try-catch包裹响应代码,日志记录异常信息。

2. 验证MicroPython POST请求的格式

MicroPython的urequests对请求格式的兼容性较弱,需确保请求严格符合HTTP规范:

  • 请求头设置:如果发送JSON数据,必须添加Content-Type: application/json头,示例:
    import urequests
    import json
    
    data = {"temp": 25.5, "datetime": "2024-11-20T12:00:00", "board_id": "PicoPlus2-001"}
    headers = {"Content-Type": "application/json", "X-API-Key": "YOUR_API_KEY"}
    response = urequests.post(GAS_URL, data=json.dumps(data), headers=headers)
    
  • 数据编码:确保发送的数据是UTF-8编码的字节或字符串,部分urequests版本要求字节类型,需添加.encode('utf-8'):
    response = urequests.post(GAS_URL, data=json.dumps(data).encode('utf-8'), headers=headers)
    
  • 避免冗余参数:检查是否传递了urequests不支持的参数(如verify=False,MicroPython版本可能无此选项),会导致请求构造错误。

3. 对比成功请求的差异(Arduino/CircuitPython)

将MicroPython发送的请求与Arduino/CircuitPython中成功的请求做对比:

  • 在MicroPython中打印完整的请求内容(头、数据),通过串口输出:
    print("Request Headers:", headers)
    print("Request Data:", json.dumps(data))
    
  • 用工具模拟两种环境的请求,观察响应状态码的差异,定位格式不一致的地方。

4. 检查GAS部署与API密钥配置

  • 确认GAS部署时选择的是Web应用,且执行权限为"任何人,甚至匿名"(如果依赖API密钥验证,需确保密钥在请求中正确传递)。
  • 检查API密钥的限制规则:是否允许MicroPython设备的IP访问?虽然数据已处理,但IP限制可能导致响应阶段返回400(部分云服务会先验证权限再处理请求,处理后仍返回权限错误)。

内容的提问来源于stack exchange,提问作者Paulsk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:03:16