📡 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 请求头 | 自动生成(自动处理 Host、User-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掌控全流程。

浙公网安备 33010602011771号