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
相关产品推荐
相关产品推荐

