Arduino ESP8266执行http.POST()返回错误码-11问题求助
ESP8266 HTTPClient返回错误码-11排查方案
ESP8266HTTPClient库官方定义错误码-11为连接失败,常见触发原因和对应解决方法如下:
- 必现问题修复:你的代码缺少HTTP资源释放逻辑,每次请求完成后必须调用
http.end()释放底层连接资源,否则多次请求后会出现连接占满、内存泄漏,直接触发-11错误,修改authenticate函数如下:
int authenticate() { http.begin(client, authentication); http.addHeader("Content-Type", "application/json"); String data = "{\"username\":\"" + String(username) + "\"," + "\"password\":\"" + String(password) + "\"}"; int httpResponseCode = http.POST(data); // 错误时打印可读错误信息,方便快速定位 if (httpResponseCode < 0) { Serial.printf("请求错误:%s\n", http.errorToString(httpResponseCode).c_str()); } else { token = http.getString(); } // 新增:释放HTTP连接资源 http.end(); Serial.println(httpResponseCode); return httpResponseCode; }
- 协议匹配检查:确认
authentication变量存储的接口地址协议头是否正确:- 如果是HTTPS接口,你当前使用的
WiFiClient不支持SSL连接,需要替换为WiFiClientSecure,测试阶段可以加client.setInsecure()关闭证书校验快速验证,生产环境建议写入服务端证书做校验 - 确认接口端口是否显式标注,非80(HTTP)、443(HTTPS)的非标端口必须在地址中写明
- 如果是HTTPS接口,你当前使用的
- 网络一致性检查:Postman测试正常仅代表你所用电脑的网络可访问接口,需确认ESP8266连接的WiFi没有做端口封禁、域名拦截,接口没有配置仅允许特定IP段访问
- 域名解析排查:在
authenticate函数开头加入调试代码,确认ESP8266可以正常解析接口域名:
IPAddress serverIp; if (WiFi.hostByName("你的接口域名", serverIp)) { Serial.print("域名解析结果:"); Serial.println(serverIp); } else { Serial.println("域名解析失败"); }
- 版本兼容性验证:如果近期升级过ESP8266 Arduino核心版本,新版核心对HTTP/HTTPS连接逻辑有修改,可回退到一个月前使用的核心版本验证是否恢复正常。
内容的提问来源于stack exchange,提问作者Captain Jacky
相关产品推荐
相关产品推荐

