3.1.3 HTTP/HTTPS ================ 作者:闫国梁 最后修改时间:2020年6月23日 ## 概述: 模块内置http client,可以实现http请求组包,结果处理的等功能。有AT,LUAT,CSDK和开源DTU等多种开发方式。 ## AT模式 ## 初始化 HTTP 服务:AT+HTTPINIT 语法规则: +----------+-------------------------------------------------------------+------+ | 命令类型 | 语法 | 返回 | +==========+=============================================================+======+ | 执行命令 | AT+HTTPINIT | OK | +----------+-------------------------------------------------------------+------+ | 测试命令 | AT+HTTPINIT=? | OK | +----------+-------------------------------------------------------------+------+ | 注意事项 | 在使用HTTP服务前,应该先用AT+HTTPINIT命令来初始化HTTP协议栈 | | +----------+-------------------------------------------------------------+------+ 启用 SSL:AT+HTTPSSL -------------------- 语法规则: ======== ================= ================== ============= 命令类型 语法 返回 ======== ================= ================== ============= 设置命令 AT+HTTPSSL= OK 读取命令 AT+HTTPSSL? + HTTPSSL: OK 测试命令 AT+HTTPSSL=? +HTTPSSL: (0-1) OK 参数 定义 取值 对取值的说明 \ HTTP SSL 功能开关 0 关闭 SSL 功能 1 开启 SSL 功能 ======== ================= ================== ============= 设置 HTTP 参数值:AT+HTTPPARA ----------------------------- 语法规则: ======== ============== ============================================== 命令类型 语法 返回 ======== ============== ============================================== 设置命令 AT+HTTPPARA= , OK 查询命令 AT+HTTPPARA? +HTTPPARA: list of :) OK 测试命令 AT+HTTPPARA=? +HTTPPARA: “HTTPParamTag”,” HTTPParamValue” OK ======== ============== ============================================== 参数定义: +-----------------+-----------------+-----------------+-----------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +=================+=================+=================+=================+ | | | | | | :H | | | | | TTP参数,包括: | | | | +-----------------+-----------------+-----------------+-----------------+ | “CID” | 承载上 | 1~3 | | | | 下文号码(必选参 | | | | | 数) | | | +-----------------+-----------------+-----------------+-----------------+ | “URL” | HTTP 或 HTTPS | “http://serve | Server: FQDN or | | | URL(必选参数) | r/path:tcpPort” | IP-address | | | 注:同时支持 | 或: | Path: path of | | | **HTTPS** 和 | “https://serve | file or | | | **HTTP URL** | r/path:tcpPort” | directory | | | | | tcpPort: | | | | | 如果参数省略 | | | | | ,将服务连接到 | | | | | HTTP 默认端口 | | | | | 80。 | | | | | 参考"IETF-RFC | | | | | 261 | +-----------------+-----------------+-----------------+-----------------+ | “UA” | 应用程序必须 | - | 默认值为:合宙 | | | 设置用户代理来 | | module | | | 识别移动终端。 | | | | | 通常操作系统和 | | | | | 软件版本信息在 | | | | | 设置时都会携带 | | | | | 浏览器标识符。 | | | +-----------------+-----------------+-----------------+-----------------+ | “PROIP” | HTTP | - | | | | 代理服务器的 IP | | | | | 地址 | | | +-----------------+-----------------+-----------------+-----------------+ | “PROPORT” | HTTP 代 理 服 | - | | | | 务 器 的 PORT | | | +-----------------+-----------------+-----------------+-----------------+ | “REDIR” | 作为 HTTP | - | 默认值为 | | | 客户端 | | 0(无定向) | | | 时用此标志控制 | | | | | 重定向机制。如 | | | | | 果此标记设置为 | | | | | 1,当服务器发 | | | | | 送重定向码(范围 | | | | | 30x)时,客户 | | | | | 端自动发送新的 | | | | | HTTP 请求 | | | +-----------------+-----------------+-----------------+-----------------+ | “BREAK” | HTTP 方法 ”GET” | - | 获取从断点 | | | 的参数,整数型 | | 到结束点的部分 | | | | | 数据,注意不是 | | | | | 所 有 的 HTTP | | | | | 服 务 器 都 支 | | | | | 持 参数。BREAK | | | | | 最小值是 0。 | +-----------------+-----------------+-----------------+-----------------+ | “BREAKEND” | 和 | - | 如果“ | | | “BREAK”一起使用 | | BREAKEND”大于“B | | | ,用于断点续传 | | REAK”,续传的范 | | | 功能。整数型。 | | 围从“BREAKEND” | | | | | 到“BREAK”。如果 | | | | | “BREAKEND”小于 | | | | | “BREAK”,续传的 | | | | | 范围从“BREAK”到 | | | | | 文件结尾。如果 | | | | | “BREAKEN | | | | | D”和“BREAK”均为 | | | | | 0,将不 | | | | | 会续传。 | +-----------------+-----------------+-----------------+-----------------+ | “USER_DEFINED” | 用户自定义参数 | | 用户自定义参数 | | | ,为了兼容合宙 | | 的取值。例如: | | | 2G 模块 | | AT+HTTPPARA= | | | | | “USER_DEFINED”, | | | | | “Content-type: | | | | | js | | | | | on-user-define” | | | | | 注:如果需 | | | | | 要设置多条用户 | | | | | 自定义参数,则 | | | | | 一条一条地输入 | | | | | 。后面输入的不 | | | | | 会覆盖以前的。 | +-----------------+-----------------+-----------------+-----------------+ | “USERDATA” | 用户自定 | | 用户自定义参数 | | | 义参数,作用同 | | 的取值。例如: | | | “USER | | AT+HTTPPARA= | | | _DEFINED”,为了 | | “USERDATA”,"Con | +-----------------+-----------------+-----------------+-----------------+ | | 兼容 SIMCOM | | tent-type: | | | 模块 | | js | | | | | on-user-define" | | | | | 注:如果想 | | | | | 设置多条用户定 | | | | | 义参数,则多条 | | | | | 参数之间可以用 | | | | | :raw-latex:`\r\ | | | | | n `连接。例如: | | | | | AT+HTTPPARA= | | | | | “USERDATA”,“Con | | | | | tent-Type | | | | | :application/js | | | | | on:raw-latex:`\ | | | | | r\nAPP `KEY:FW” | | | | | 在 MCU | | | | | 程序中需要将: | | | | | raw-latex:`\r\n | | | | | `写成\ `\\r\n | | | | | `__ | | | | | 值 | | | | | 得一提的是有些 | | | | | PC | | | | | 串口工具,例如 | | | | | SSCOM,会将 | | | | | :raw-latex:`\r | | | | | 和`:raw-latex: | | | | | `\n `当做控制字 | | | | | 符处理,所以也 | | | | | 需要将:raw-late | | | | | x:`\r\n `写成\ | | | | | `\\r\n `__\ 而另外 | | | | | 一些工具,例如 | | | | | XCO | | | | | M,不会将:raw-l | | | | | atex:`\r 和`:ra | | | | | w-latex:`\n `当 | | | | | 做控制字符处理 | | | | | ,所以直接输入 | | | | | :r | | | | | aw-latex:`\r\n` | +-----------------+-----------------+-----------------+-----------------+ | : 的取值。 | | | | | 注: | | | | | “USER_DEFINED” | | | | | 和“USERDA | | | | | TA”中内嵌的双引 | | | | | 号,用\22表达。 | | | | +-----------------+-----------------+-----------------+-----------------+ 举例: +---------------+----------------------------------------------+------+ | 命令(→) | 实例 | 解 | | /返回(←) | | 释和 | | | | 说明 | +===============+==============================================+======+ | → | AT+HTTPPARA? | | +---------------+----------------------------------------------+------+ | ← | +HTTPPARA: CID: 1 URL: UA: AM_MODULE PROIP: | | | | 0.0.0.0 PROPORT: 0 REDIR: 0 BREAK; 0 | | | | BREAKEND: 0 TIMEOUT: 120 CONTENT: USERDATA: | | | | OK | | +---------------+----------------------------------------------+------+ 写数据:AT+HTTPDATA ------------------- 语法规则: ======== ============= =================================== 命令类型 语法 返回 ======== ============= =================================== 设置命令 AT+HTTPDATA=, DOWNLOAD OK 测试命令 AT+HTTPDATA=? +HTTPDATA: (取值列表),(取值列表) OK ======== ============= =================================== 参数定义: +-----------------+-----------------+-------------+-----------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +=================+=================+=============+=================+ | | POST 数据的大小 | 1-102400 | 最大长度为 | | | | | 102400 | +-----------------+-----------------+-------------+-----------------+ | 0 | 后面一个参 | | | | | 数不判断,相当 | | | | | 于把内容清除掉 | | | +-----------------+-----------------+-------------+-----------------+ | | 输入 | 1000-120000 | 单位:ms | | | 数据的最长时间 | | | +-----------------+-----------------+-------------+-----------------+ | 注: | | | | | 强烈建议设置的 | | | | | 时间要能够全部 | | | | | 输入所有的数据 | | | | | ,下载数据的真 | | | | | 实大小不能大于 | | | | +-----------------+-----------------+-------------+-----------------+ HTTP 方式激活:AT+HTTPACTION ---------------------------- 语法规则: +-----------------------------+----------+-----------------------------+ | 命令类型 | 语法 | 返回 | +=============================+==========+=============================+ | 设置命令 | AT+HTT | OK 后面紧跟 Unsolicited | | | PACTION= | Result Code: +HTTPACTION: | | | | ,, | +-----------------------------+----------+-----------------------------+ | 或如果错误与 ME | | | | 功能相关,则返回: +CME | | | | ERROR: 后面紧跟 Unsolicited | | | | Result Code: +HTTPACTION: | | | | ,, | | | +-----------------------------+----------+-----------------------------+ | 测试命令 | AT+HTTP | +HTTPACTION: (0-2) OK | | | ACTION=? | | +-----------------------------+----------+-----------------------------+ 参数定义: +------+--------------------------+------+------------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +======+==========================+======+==================+ | | HTTP 方法说明 | 0 | GET | +------+--------------------------+------+------------------+ | 1 | POST | | | +------+--------------------------+------+------------------+ | 2 | HEAD | | | +------+--------------------------+------+------------------+ | | 得到的数据长度 | - | 整数型 | +------+--------------------------+------+------------------+ | | HTTP | 100 | 继续(Continue) | | | 状 | | | | | 态码,由远端服务器响应, | | | | | 参考 TTP1.1(RFC2616) | | | +------+--------------------------+------+------------------+ | 101 | 交换协议(Switching | | | | | Protocols) | | | +------+--------------------------+------+------------------+ | 200 | 确定(OK) | | | +------+--------------------------+------+------------------+ | 201 | 已创建(Created) | | | +------+--------------------------+------+------------------+ | 202 | 已接受(Accepted) | | | +------+--------------------------+------+------------------+ | 203 | 非权 | | | | | 威消息(Non-Authoritative | | | | | Information) | | | +------+--------------------------+------+------------------+ === ============================================================= 204 无内容(No Content) === ============================================================= 205 重置内容(Reset Content) 206 部分内容(Partial Content) 300 多重选择(Multiple Choices) 301 永久删除(Moved Permanently) 302 找到(Found ) 303 参考其他(See Other) 304 未修改(Not Modified) 305 使用代理服务器(Use Proxy) 307 临时重定向(Temporary Redirect ) 400 错误请求(Bad Request) 401 未授权(Unauthorized) 402 付费请求(Payment Required) 403 禁止(Forbidden) 404 找不到(Not Found) 405 方法不被允许(Method not Allowed) 406 不可接受(Not Acceptable) 407 要 求 进 行 代 理 身 份 认 证 (Proxy AuthenticationRequired) 408 请求超时 (Request Time-out) 409 冲突(Conflict) 410 所请求资源不在服务器上有效,且不知道转发地址(Gone) 411 需要输入长度(Length Required) 412 前提条件失败 (Precondition Failed) 413 请求实体太大(Request Entity Too Large) 414 请求URI太长(Request-URI Too Large) 415 媒体类型不支持(Unsupported Media Type) 416 所 请 求 的 范 围 无 法 满 足(Requested range notsatisfiable) 417 执行失败(Expectation Failed) 500 内部服务器错误(Internal Server Error) 501 未执行 (Not Implemented) 502 网关错误(Bad Gateway) 503 服务不可用(Service Unavailable) 504 网关超时(Gateway Time-out) 505 HTTP 版本不支持(HTTP Version not supported) 600 非 HTTP PDU 格式(Not HTTP PDU) 601 网络错误(Network Error) 602 内存不足(No memory) 603 DNS 错误(DNS Error) 604 栈忙(Stack Busy) 605 SSL建立通道失败 606 SSL通讯警告错误 === ============================================================= 查询 HTTP 服务响应:AT+HTTPREAD ------------------------------- 语法规则: +----+--------------------------+--------------------------------------+ | 命 | 语法 | 返回 | | 令 | | | | 类 | | | | 型 | | | +====+==========================+======================================+ | 设 | AT+HTTPREAD= , | +HTTPREAD: OK | | 置 | | | | 命 | | | | 令 | | | +----+--------------------------+--------------------------------------+ | 执 | AT+HTTPREAD | +HTTPREAD: OK 读取 AT+HTTPACTION=0 | | 行 | | 或 AT+HTTPDATA 命令的所有响 应数据。 | | 命 | | 执行命令用来将 HTTP | | 令 | | 服务器的响应输出到 UART | | | | 或者输出准备好 POST 到服务器的数据。 | +----+--------------------------+--------------------------------------+ | 测 | AT+HTTPREAD=? | +HTTPREAD: (list of supported s),( | | 试 | | list of supporteds) OK | | 命 | | | | 令 | | | +----+--------------------------+--------------------------------------+ 参数定义: ==== =========================================== ======== ============ 参数 定义 取值 对取值的说明 ==== =========================================== ======== ============ \ 实际输出数据长度 \ HTTP 服务器对AT+HTTPACTION=0命令 的响应数据 \ 输出数据的起点 0~319488 单位:字节 \ 输出数据的长度 1~319488 单位:字节 ==== =========================================== ======== ============ 查询 HTTP 头信息:AT+HTTPHEAD ----------------------------- 语法规则: ======== ============= ============= 命令类型 语法 返回 ======== ============= ============= 执行命令 AT+HTTPHEAD +HTTPREAD: OK 测试命令 AT+HTTPHEAD=? OK ======== ============= ============= 参数定义: ==== ================ ==== ============ 参数 定义 取值 对取值的说明 ==== ================ ==== ============ \ 头信息的实际长度 \ 头信息 ==== ================ ==== ============ 保存 HTTP 应用上下文:AT+HTTPSCONT ---------------------------------- 执行命令保存包含 AT 命令参数的 HTTP 应用上下文,当系统重启时,参数将自动载入。 查询命令返回 HTTP 应用上下文。语法规则: +------+----------+----------------------------------------------------+ | 命令 | 语法 | 返回 | | 类型 | | | +======+==========+====================================================+ | 执行 | AT+H | +HTTPREAD: (list of supported s),( list of | | 命令 | TTPSCONT | supporteds) OK | +------+----------+----------------------------------------------------+ | 查询 | AT+HT | +HTTPSCONT: CID: URL: UA: PROIP: PROPORT: REDIR: | | 命令 | TPSCONT? | BREAK: BREAKEND: USERDATA: OK | +------+----------+----------------------------------------------------+ 参数定义: ==== =================== ==== ================== 参数 定义 取值 对取值的说明 ==== =================== ==== ================== \ HTTP 上下文保存模式 0 保存,值取自 NVRAM 1 未保存,值取自 RAM ==== =================== ==== ================== 终止 HTTP 任务:AT+HTTPTERM --------------------------- 语法规则: ======== ============= ==== 命令类型 语法 返回 ======== ============= ==== 设置命令 AT+HTTPTERM OK 测试命令 AT+HTTPTERM=? OK ======== ============= ==== HTTP 错误码:ERROR: -------------------- HTTP 错误码会以 ERROR:形式上报。 定义: ==== =========================================== =================== 取值 英文说明 中文说明 ==== =========================================== =================== 0 Unknown session id 未知的会话 ID 1 File is too short 文件的内容太短 2 DNS is fail 域名解析失败 3 HTTP is busy HTTP 任务正忙 4 Socket is wrong 套接字失败 5 Connect fail 连接失败 6 File is error 文件错误 7 Connection is closed 连接已关闭 8 Connection is destroyed 连接已销毁 9 HTTP header is not found HTTP 头不存在 10 HTTP authentication scheme is not supported HTTP 认证机制不支持 11 PDP active is wrong PDP 激活失败 12 Param is wrong 参数有误 13 No buffer 缓冲区不足 14 PDP deactive is wrong PDP 去激活失败 ==== =========================================== =================== CSDK模式 -------- https://luatdoc.papapoi.com/888/ ## DTU模式 https://www.bilibili.com/video/BV1ot411h7LJ?p=29