📡 ESP8266 网络请求指令对比与配置指南

核心结论AT+HTTPCLIENT 是 ESP8266 固件封装的高级 HTTP 客户端指令,自动处理 DNS、TCP 连接与 HTTP 报文拼接;而 AT+CIPSEND 是纯粹的底层 TCP Socket 发送指令,需要开发者手动拼接完整的 HTTP 报文。


1. AT+HTTPCLIENT 参数深度拆解

指令基本语法格式:

AT+HTTPCLIENT=<opt>,<content-type>,"<url>",["<host>"],["<path>"],<transport_type>

📝 参数 1 (<opt>): HTTP 请求方法

决定对服务器执行何种动作:

方法 作用 适用场景
1 HEAD 只获取响应头,不获取具体数据内容(Body) 仅检查服务器状态、校验文件更新或测试连接
2 GET 获取数据,将 URL 对应的资源/数据请求回来 获取天气 API、请求网页 HTML、下载文件
3 POST 提交数据,向服务器上传表单或 JSON 内容 传感器数据上报、用户登录、配置提交

📊 参数 2 (<content-type>): 内容类型

告知服务器客户端发送或期望交互的数据格式:

Content-Type 格式 说明 适用场景
0 application/x-www-form-urlencoded HTML 标准表单格式(键值对 a=1&b=2 传统表单提交、简易接口调用
1 application/json JSON 格式数据 现代 RESTful API 交互、物联网平台数据上报
2 multipart/form-data 多段表单格式 文件上传
3 text/xml XML 文本格式 WebService 接口、旧式 API 交互

💡 常见组合场景对比

❌ AT+HTTPCLIENT=1,0,...  -> HEAD 请求 + 表单格式
                             只取响应头,无法拿到真正的天气数据 JSON!

✅ AT+HTTPCLIENT=2,0,...  -> GET 请求 + 表单格式
                             获取天气最常用的标准写法。

✅ AT+HTTPCLIENT=2,1,...  -> GET 请求 + JSON 格式
                             执行 GET 请求,同时告知服务器按照 application/json 格式处理/交互。


2. 终极对比:AT+HTTPCLIENT vs AT+CIPSEND

下表对比了 ESP8266 两种发送网络请求的机制差异:

对比维度 AT+HTTPCLIENT (高级封装模式) AT+CIPSEND (Socket 透传模式)
本质定位 应用层 HTTP 客户端 传输层 TCP / UDP Socket
DNS 解析 内部自动完成域名解析 需先执行 AT+CIPSTART 触发 DNS
TCP 连接 自动发起连接,请求完自动关闭 需显式发送 AT+CIPSTART 建立连接
HTTP 请求头 自动生成(自动处理 HostUser-Agent 等) 完全手动通过字符串拼接处理(需手动补 \r\n\r\n
响应头处理 固件自动剥离 HTTP 报头,直接返回数据内容 接收原始报文(必须代码查找 \r\n\r\n 手动剥离响应头)
代码复杂度 极低(1 条指令完成发送与接收) 较高(需状态机控制连接、发送字节计数、字符串解析)
灵活性 较低(受限于固件支持的请求头与方法) 极高(可自由定制任意 HTTP 头、Cookie、 Token)

3. 代码实操流程对照

🔹 模式 A:使用 AT+HTTPCLIENT 获取天气

一条指令直达:

# 自动完成:DNS -> TCP 连接 -> 发送 GET 请求 -> 自动剥离响应头 -> 返回 JSON 体
AT+HTTPCLIENT=2,0,"http://api.seniverse.com/v3/weather/now.json?key=xxx&location=beijing",,1


🔹 模式 B:使用 AT+CIPSEND 手动获取天气

需分步控制底层生命周期:

# 1. 建立 TCP 连接
AT+CIPSTART="TCP","api.seniverse.com",80

# 2. 准备发送固定长度的字节流
AT+CIPSEND=120

# 3. 手动输入标准的 HTTP 报文(含空行分隔符 \r\n\r\n)
GET /v3/weather/now.json?key=xxx&location=beijing HTTP/1.1\r\n
Host: api.seniverse.com\r\n
Connection: close\r\n
\r\n

# 4. 串口接收完整响应字符串,单片机需在代码中自行剥离开头的 HTTP/1.1 200 OK 报头


💡 总结口诀
HTTPCLIENT 省心快,指令搞定 DNS 与报头;
CIPSEND 灵活高,手动拼接 \r\n 掌控全流程。

posted @ 2026-08-14 11:32  陈之文  阅读(10)  评论(0)    收藏  举报