HTTP/HTTPS ========== 作者:闫国梁 最后修改时间:2020年8月11日 关键词:\ **HTTP,服务器,请求服务器,下载数据** 1 概述: -------- HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型(AT模式模块仅能作为客户端)。HTTP是一个无状态的协议。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS,所以HTTPS相关的指令只需要参考SSL部分配置连接,其他和http都是一样的。 2 相关AT指令介绍 ---------------- 2.1 初始化 HTTP 服务:AT+HTTPINIT --------------------------------- 语法规则: +----------+-------------------------------------------------------------+------+ | 命令类型 | 语法 | 返回 | +==========+=============================================================+======+ | 执行命令 | AT+HTTPINIT | OK | +----------+-------------------------------------------------------------+------+ | 测试命令 | AT+HTTPINIT=? | OK | +----------+-------------------------------------------------------------+------+ | 注意事项 | 在使用HTTP服务前,应该先用AT+HTTPINIT命令来初始化HTTP协议栈 | | +----------+-------------------------------------------------------------+------+ 2.2 启用 SSL:AT+HTTPSSL ------------------------ 语法规则: ======== ================= ================== ============= 命令类型 语法 返回 ======== ================= ================== ============= 设置命令 AT+HTTPSSL= OK 读取命令 AT+HTTPSSL? + HTTPSSL: OK 测试命令 AT+HTTPSSL=? +HTTPSSL: (0-1) OK 参数 定义 取值 对取值的说明 \ HTTP SSL 功能开关 0 关闭 SSL 功能 \ 1 开启 SSL 功能 ======== ================= ================== ============= 2.3 设置 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 | | +---------------+----------------------------------------------+------+ 2.4 写数据:AT+HTTPDATA ----------------------- 语法规则: ======== ============= =================================== 命令类型 语法 返回 ======== ============= =================================== 设置命令 AT+HTTPDATA=, DOWNLOAD OK 测试命令 AT+HTTPDATA=? +HTTPDATA: (取值列表),(取值列表) OK ======== ============= =================================== 参数定义: +-----------------+-----------------+-------------+-----------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +=================+=================+=============+=================+ | | POST 数据的大小 | 1-102400 | 最大长度为 | | | | | 102400 | +-----------------+-----------------+-------------+-----------------+ | | | 0 | 后面一个参 | | | | | 数不判断,相当 | | | | | 于把内容清除掉 | +-----------------+-----------------+-------------+-----------------+ | | 输入 | 1000-120000 | 单位:ms | | | 数据的最长时间 | | | +-----------------+-----------------+-------------+-----------------+ | 注: | | | | | 强烈建议设置的 | | | | | 时间要能够全部 | | | | | 输入所有的数据 | | | | | ,下载数据的真 | | | | | 实大小不能大于 | | | | +-----------------+-----------------+-------------+-----------------+ 2.5 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通讯警告错误 | +------+--------------------------+------+--------------------------+ 2.6 查询 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 单位:字节 ==== =========================================== ======== ============ 2.7 查询 HTTP 头信息:AT+HTTPHEAD --------------------------------- 语法规则: ======== ============= ============= 命令类型 语法 返回 ======== ============= ============= 执行命令 AT+HTTPHEAD +HTTPREAD: OK 测试命令 AT+HTTPHEAD=? OK ======== ============= ============= 参数定义: ==== ================ ==== ============ 参数 定义 取值 对取值的说明 ==== ================ ==== ============ \ 头信息的实际长度 \ 头信息 ==== ================ ==== ============ 2.8 保存 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 ==== =================== ==== ================== 2.9 终止 HTTP 任务:AT+HTTPTERM ------------------------------- 语法规则: ======== ============= ==== 命令类型 语法 返回 ======== ============= ==== 设置命令 AT+HTTPTERM OK 测试命令 AT+HTTPTERM=? OK ======== ============= ==== 2.10 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 去激活失败 ==== =========================================== =================== 3 AT指令示例 ------------ **实例说明:实例内容为使用AT进行POST请求** 3.1 连接网络 ------------ **3.1.1 开机** ~~~~~~~~~~~~~~ 通过拉低powerkey2秒进行开机,开机以后通过串口循环发送AT直到收到OK,如果90秒没有收到OK请拉低 RESET_IN_N 引脚 150ms 以上。或使用其他方法见\ `开关机 `__\ 章节 3.1.2 查询卡状态 ~~~~~~~~~~~~~~~~ **AT+CPIN?**\ 查询卡状态,直到收到+CPIN: READY,如果10s内没有收到建议重启模块 3.1.3 查询网络注册情况 ~~~~~~~~~~~~~~~~~~~~~~ **AT+CGATT?**\ 查询是否注册网络收到+CGATT: 1值是1即为注册成功,正常情况下注册时间不会超过两分钟,如果超过两分钟没有注册可以进入飞行模式五秒后退出再查询,或者直接重启模块。 3.1.4 激活网络 ~~~~~~~~~~~~~~ **AT+CSTT**\ 配置网络,非私有APN以外Cat1的固件支持根据卡自动配置APN,直接输入AT+CSTT即可,模块会按照自动获取的APN设置CSTT的APN。 **AT+CIICR**\ 激活网络,在IP START的状态使用AT+CIICR激活网络,激活以后通过\ **AT+CIFSR**\ 查询是否获取IP,如果成功就可以开始配置TCP连接了,如果不成功使用AT+CIPSHUT关闭移动网络,从AT+CSTT重新进行 3.2 HTTP请求 ------------ +-----------------------------------+-----------------------------------+ | AT+SAPBR=3,1,“CONTYPE”,“GPRS” | 设置HTTP功能的承载类型 | | | SAPBR是为了激活PDP上下文 | +===================================+===================================+ | OK | | +-----------------------------------+-----------------------------------+ | AT+SAPBR=3,1,“APN”,"" | 设置 APN | | | 模 | | | 块注册网络后会从网络自动获取并激 | | | 活一个PDP上下文,用于RNDIS上网使 | | | 用。此可以通过AT+CGDCONT?来查询。 | | | V980之前(不含V980 | | | ),需要AT+CGDCONT?查询得到并设置 | | | : AT+SAPBR=3,,“APN”, | | | V980之后(包含 | | | V980),输入AT+SAPBR=3,,“APN”,"" | | | 即可, | | | 模块内部会按照自动获取的来设置APN | +-----------------------------------+-----------------------------------+ | OK | | +-----------------------------------+-----------------------------------+ | AT+SAPBR=1,1 | 激活该承载的GPRS PDP上下文 | +-----------------------------------+-----------------------------------+ | OK | | +-----------------------------------+-----------------------------------+ | AT+SAPBR=2,1 | 查询下承载的状态 | +-----------------------------------+-----------------------------------+ | +SAPBR: 1,1,010.169.179.213 OK | 第一个参数1表示cid | | | 第二个参数1表示已经连接 | | | 第三个参数表示模块获取的IP地址 | +-----------------------------------+-----------------------------------+ | AT+HTTPINIT | HTTP协议栈初始化 | +-----------------------------------+-----------------------------------+ | OK | | +-----------------------------------+-----------------------------------+ | AT+HTTPSSL=1 | 设置使用SSL连接(不需要验证证书) | +-----------------------------------+-----------------------------------+ | OK | | +-----------------------------------+-----------------------------------+ | AT+SSLCFG | | | =“hostname”,153,“fanyi.baidu.com” | | +-----------------------------------+-----------------------------------+ | OK | | +-----------------------------------+-----------------------------------+ | AT+HTTPPARA=“CID”,1 | 设置HTTP会话参数:CID | +-----------------------------------+-----------------------------------+ | OK | | +-----------------------------------+-----------------------------------+ | AT+HTTPPAR | 设置HTTP会话参数:URL | | A=“URL”,“https://fanyi.baidu.com” | | +-----------------------------------+-----------------------------------+ | OK | | +-----------------------------------+-----------------------------------+ | AT+HTTPDATA=4,100000 | 输入4个字节,等待时间是10S,输入 | | | 时间要设定的足够大以保证数据输入 | +-----------------------------------+-----------------------------------+ | DOWNLOAD 中国 OK | DOWNLOAD表示已经准备好输入数据 | | | 输入中国(中国两个字占用4个字节) | | | OK出现表示输入结束 | +-----------------------------------+-----------------------------------+ | AT+HTTPACTION=1 | POST开始 | +-----------------------------------+-----------------------------------+ | OK | | +-----------------------------------+-----------------------------------+ | +HTTPACTION:1,200,207751 | 表示POST成功 | +-----------------------------------+-----------------------------------+ | AT+HTTPREAD | 读取内容 | +-----------------------------------+-----------------------------------+ \| +HTTPREAD: 207751 .. raw:: html .. raw:: html .. raw:: html .. raw:: html .. raw:: html 鐧惧害缈昏瘧 .. raw:: html .. raw:: html k||(g(function(){alog(”speed.set“,”lt“,+new Date),e=b.createElement(c),e.async=!0,e.src=d+”?v=“+~(new Date/864e5)+~(new Date/864e5),f=b.getElementsByTagName(c)[0],f.parentNode.insertBefore(e,f)}),j())}}(window,document,”script“,”/hunter/alog/dp.min.js"); }(); !function(){ require(‘translation:widget/translate/common/sectrans’); }(); .. raw:: html .. raw:: html .. raw:: html OK \| \| \| AT+HTTPTERM \| 结束HTTP服务 \| \| OK \| 下载HTTP会话从AT+SAPBR=2,1开始,如果此命令查询IP地址还在,则HTTPINIT HTTPPARA依次执行下去 \| 4 相关资料以及购买链接 ---------------------- `《AT指令手册》 `__ 相关开发板购买链接 `Air724UG开发板 `__ `Air724 开发板使用说明 `__ 5 常见问题 ---------- Q:为什么我只发了10字节消息,100次却消耗了那么多流量? A:因为还有HTTP自带的请求头。 Q:为什么频繁请求会失败? A:支持的http连接总数有限数量为tcp连接数量8个,建议一个http连接返回请求结果之后,再去请求下一个连接;不要使用循环定时器方式不断的发起新的http请求。 Q:如何POST文件? A: 主要是使用AT+HTTPDATA命令录入文件数据【最长支持100KB】后,发送AT+HTTPACTION=1利用post上传 **数据接收缓存问题** AT版本:有缓存机制,内存中有一个的缓冲区(2G模块300KB,4G模块319499字节),收到数据后,插入此缓冲区,然后通过AT口输出urc,提示收到的数据长度;缓冲区满之后,再收到新数据,会丢弃新收到的数据,并通过AT口输出urc提示出错;需要读取数据时,发送AT+HTTPREAD命令读取,可分段读取,也可全部读取 注意:缓冲区位于内存中,断电或者重启后,缓存表中的数据会被清空;虽然缓冲区可以缓存很多数据,但是建议收到数据时,通过AT+HTTPREAD及时读取出来,以防缓冲区满出错 **AT版本如何设计HTTP应用逻辑** 见文章https://luatdoc.papapoi.com/626/