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

ESP32S3+MicroPython调用MongoDB Data API报BadStatusLine错误求助

解决ESP32S3(MicroPython v1.23.0)向MongoDB写入数据时的BadStatusLine错误

出现HTTP error: BadStatusLine: []通常是HTTP响应解析失败导致,核心原因多为请求格式不符合MongoDB Data API要求,或是MicroPython环境下的网络请求配置存在问题。以下是针对性修复方案:

关键修复点

  • 补充必要请求头:MongoDB Data API要求请求体为JSON格式,必须显式设置Content-Type: application/json头
  • 正确传递JSON请求体:MicroPython的requests.post支持直接用json参数传递字典,无需手动转字符串,避免格式错误
  • 处理SSL证书验证:ESP32S3的MicroPython可能缺少默认根证书,导致HTTPS连接异常,可临时关闭验证(生产环境建议导入对应证书)

修改后的完整代码

import json
import requests

def insert_one(data: list = []) -> None:
    try:
        url = "https://eu-central-1.aws.data.mongodb-api.com/app/data-zjbrnke/endpoint/data/v1/action/insertOne"
        # 添加Content-Type头,指定请求体格式为JSON
        headers = {
            "api-key": "TOKEN",
            "Content-Type": "application/json"
        }
        payload = {
            "dataSource": "Cluster0",
            "database": "main",
            "collection": "main",
            "document": {'teste': 'test'},
        }

        print("sending...")

        # 使用json参数直接传递payload,无需手动dumps;添加verify=False绕过证书验证
        response = requests.post(url, headers=headers, json=payload, timeout=20, verify=False)

        print(f"Response: ({response.status_code}), msg = {response.text}")

        if response.status_code == 201:
            print("Added Successfully")
        else:
            print("Error")

        response.close()

    except Exception as e:
        print(f'error: {e}')

额外排查建议

  • 确认ESP32S3网络连接稳定,能正常访问外部HTTPS服务
  • 检查MongoDB Data API的api-key、集群名称、数据库/集合名称是否完全正确
  • 若关闭证书验证仍有问题,可尝试导入MongoDB API域名对应的根证书到MicroPython环境中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:34:58