如何修复Arduino ESP8266连接Flask服务器时的400错误?
问题定位与解决方案
错误code 400, message Bad request version ('client!')的核心原因是ESP8266发送的HTTP请求格式不合法,具体是请求行中的HTTP版本字段被错误替换为了client!,导致Flask服务器无法识别合法的HTTP协议版本(如HTTP/1.1)。
修复步骤
- 检查并修正ESP8266的HTTP请求格式
确保发送的请求严格遵循HTTP协议规范,请求行必须为[请求方法] [路径] HTTP/1.1格式,示例正确的请求代码片段:// 假设使用WiFiClient发送GET请求 client.print(String("GET /your-endpoint HTTP/1.1\r\n") + "Host: 192.168.1.20\r\n" + // 必须包含Host字段,对应你的树莓派IP "Connection: close\r\n\r\n"); // 末尾需添加两个换行表示请求头结束 - 排查常见错误点
- 检查请求行中是否误将
HTTP/1.1写成了client!或其他无效字符串 - 确保请求头末尾有
\r\n\r\n(两个连续换行),用于分隔请求头和请求体 - 确认
Host字段正确填写树莓派的IP地址或域名
- 检查请求行中是否误将
- 验证请求内容
在ESP8266代码中添加串口打印,输出发送的完整请求内容,便于排查格式问题:String request = String("GET /your-endpoint HTTP/1.1\r\n") + "Host: 192.168.1.20\r\n" + "Connection: close\r\n\r\n"; Serial.println("发送的请求内容:"); Serial.println(request); client.print(request);
额外提示
如果使用POST请求,需额外添加Content-Type和Content-Length字段,确保请求体格式与服务器端预期一致。
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

