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

STM32+MbedTLS连接Firebase DB时PUT请求返回400错误排查

排查PUT请求400错误的关键点

1. 确认Content-Length头的准确性

Firebase DB严格依赖Content-Length识别请求体完整性,需重点检查:

  • 计算JSON请求体的字节数(注意UTF-8编码的多字节字符,不能直接按字符数统计)
  • 确保请求头中Content-Length的值与实际发送的请求体字节数完全一致
  • 排查是否误将字符串长度当作字节数计算,这是嵌入式场景的常见错误

2. 验证JSON格式合法性

微小的格式错误都会导致Firebase拒绝请求:

  • 用本地JSON校验工具检查数据,确保无遗漏引号、逗号,所有键名用双引号包裹
  • 将构造好的请求体转成十六进制打印,排查是否存在内存脏数据或不可见字符

3. 检查MbedTLS发送请求体的逻辑

嵌入式场景易出现请求体截断或未发送的情况:

  • 确认调用mbedtls_ssl_write()时,是否循环发送直到全部请求体字节发送完成(该函数可能分多次返回,需判断返回值累计是否等于请求体长度)
  • 检查请求头结束后是否正确插入两个连续换行符(\r\n\r\n),这是HTTP头与请求体的分隔标志,缺失会导致服务器无法识别请求体
  • 无需在JSON末尾额外添加换行,反而会干扰长度计算

4. 核对Firebase DB的PUT端点规则

  • 确认PUT的URL路径指向具体节点(如https://xxx.firebaseio.com/test.json),路径错误会导致服务器无法识别请求体接收位置
  • 请求头Content-Type必须设为application/json,改用application/x-www-form-urlencoded不符合Firebase要求

关键代码检查示例

构造请求时需重点确认字节数计算和发送逻辑:

// 示例:正确计算JSON字节数并构造Content-Length头
char json_buf[128] = "{\"temp\":25.5,\"status\":\"ok\"}";
// 若包含非ASCII字符,确保内存中是UTF-8编码,strlen可正确统计字节数
int json_len = strlen(json_buf);

char content_len_header[32];
snprintf(content_len_header, sizeof(content_len_header), "Content-Length: %d\r\n", json_len);

发送阶段需先发送完整请求头,再发送分隔符\r\n\r\n,最后循环发送请求体。

内容的提问来源于stack exchange,提问作者l.g.oasis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:43:15