LuatOS-Air AT应用指南--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
参数定义:

参数 定义 取值 对取值的说明
:HTTP参数,包括:
“CID” 承载上下文号码(必选参 数) 1~3
“URL” HTTP 或 HTTPS URL(必选参数) 注:同时支持 HTTPS 和 HTTP URL "http://server/path:tcpPort " 或: "https://server/path:tcpPort " Server: FQDN or IP-address Path: path of file or directory tcpPort: 如果参数省略,将服务连接到 HTTP 默认端口 80。 参考"IETF-RFC 261
“UA” 应用程序必须设置用户代理来识别移动终端。通常操作系统和软件版本信息在设置时都会携带浏览器标识符。 - 默认值为:合宙 module
“PROIP” HTTP 代理服务器的 IP 地址 -
“PROPORT” HTTP 代 理 服 务 器 的 PORT -
“REDIR” 作为 HTTP 客户端时用此标志控制重定向机制。如果此标记设置为 1,当服务器发送重定向码(范围 30x)时,客户端自动发送新的 HTTP 请求 - 默认值为 0(无定向)
“BREAK” HTTP 方法 ”GET” 的参数,整数型 - 获取从断点到结束点的部分数据,注意不是 所 有 的 HTTP 服 务 器 都 支 持 参数。BREAK 最小值是 0。
“BREAKEND” 和“BREAK”一起使用,用于断点续传功能。整数型。 - 如果“BREAKEND”大于“BREAK”,续传的范围从“BREAKEND”到“BREAK”。如果“BREAKEND”小于“BREAK”,续传的范围从“BREAK”到文件结尾。如果 “BREAKEND”和“BREAK”均为 0,将不 会续传。
“USER_DEFINED” 用户自定义参数,为了兼容合宙 2G 模块 用户自定义参数的取值。例如: AT+HTTPPARA=“USER_DEFINED”, “Content-type: json-user-define” 注:如果需要设置多条用户自定义参数,则一条一条地输入。后面输入的不会覆盖以前的。
“USERDATA” 用户自定义参数,作用同 “USER_DEFINED”,为了 用户自定义参数的取值。例如: AT+HTTPPARA=“USERDATA”,“Con
兼容 SIMCOM 模块 tent-type: json-user-define” 注:如果想设置多条用户定义参数,则多条参数之间可以用\r\n 连接。例如: AT+HTTPPARA=“USERDATA”,“Con tent-Type:application/json\r\nAPP KEY:FW” 在 MCU 程序中需要将\r\n 写成[\r\n](file://r/n) 值得一提的是有些 PC 串口工具,例如 SSCOM,会将\r 和\n 当做控制字符处理,所以也需要将\r\n 写成[\r\n ](file://r/n)而另外一些工具,例如 XCOM,不会将\r 和\n 当做控制字符处理,所以直接输入 \r\n
: 的取值。 注:“USER_DEFINED” 和“USERDATA”中内嵌的双引号,用\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=,

参数 定义 取值 对取值的说明
POST 数据的大小 1-102400 最大长度为 102400
0 后面一个参数不判断,相当于把内容清除掉

命令类型 语法 返回
设置命令 AT+HTTPACTION= OK 后面紧跟 Unsolicited Result Code: +HTTPACTION: ,,
或如果错误与 ME 功能相关,则返回: +CME ERROR: 后面紧跟 Unsolicited Result Code: +HTTPACTION: ,,
测试命令 AT+HTTPACTION=? +HTTPACTION: (0-2) OK
参数定义:

参数 定义 取值 对取值的说明
HTTP 方法说明 0 GET
1 POST
2 HEAD
得到的数据长度 - 整数型
HTTP 状态码,由远端服务器响应, 参考 TTP1.1(RFC2616) 100 继续(Continue)
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=<start_address> ,<byte_size> +HTTPREAD:<date_len> OK
执行命令 AT+HTTPREAD +HTTPREAD:<date_len> OK 读取 AT+HTTPACTION=0 或 AT+HTTPDATA 命令的所有响 应数据。 执行命令用来将 HTTP 服务器的响应输出到 UART 或者输出准备好 POST 到服务器的数据。
测试命令 AT+HTTPREAD=? +HTTPREAD: (list of supported <start_address>s),( list of supported<byte_size>s) OK
参数定义:

参数 定义 取值 对取值的说明
<date_len> 实际输出数据长度
HTTP 服务器对AT+HTTPACTION=0命令 的响应数据
<start_address> 输出数据的起点 0~319488 单位:字节
<byte_size> 输出数据的长度 1~319488 单位:字节
2.7 查询 HTTP 头信息:AT+HTTPHEAD
语法规则:

命令类型 语法 返回
执行命令 AT+HTTPHEAD +HTTPREAD:<date_len> OK
测试命令 AT+HTTPHEAD=? OK
参数定义:

参数 定义 取值 对取值的说明
<date_len> 头信息的实际长度
头信息
2.8 保存 HTTP 应用上下文:AT+HTTPSCONT
执行命令保存包含 AT 命令参数的 HTTP 应用上下文,当系统重启时,参数将自动载入。

查询命令返回 HTTP 应用上下文。语法规则:

命令类型 语法 返回
执行命令 AT+HTTPSCONT +HTTPREAD: (list of supported <start_address>s),( list of supported<byte_size>s) OK
查询命令 AT+HTTPSCONT? +HTTPSCONT: CID: URL: UA: PROIP: PROPORT: REDIR: 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+HTTPPARA=“URL”,“https://fanyi.baidu.com” 设置HTTP会话参数:URL
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 鐧惧害缈昏瘧 <meta name=“description” content=“鐧惧害缈昏瘧鎻愪緵鍗虫椂 …… “https://fex.bdstatic.com”+d:“http://fex.bdstatic.com”+d,k&&l&&l>k||(g(function(){alog(“speed.set”,“lt”,+new Date),e=b.createElement©,e.async=!0,e.src=d+”?v=“+~(new Date/864e5)+~(new Date/864e5),f=b.getElementsByTagName©[0],f.parentNode.insertBefore(e,f)}),j())}}(window,document,“script”,”/hunter/alog/dp.min.js"); }(); !function(){ require(‘translation:widget/translate/common/sectrans’); }(); 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及时读取出来,以防缓冲区满出错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l531798151

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值