关键词:HTTP,POST,GET
目录
http
简介
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS,所以HTTPS相关的指令只需要参考SSL部分配置连接,其他和http都是一样的。
API说明
http的API在luat lib有做封装,建议直接用lib的API接口。
API接口 | 描述 |
---|---|
http.request() | 发起http请求 |
详细的API介绍见http API章节
实现流程
通过调用功能强大的http.request(),发送HTTP请求即可
http.request(method, url, cert, head, body, timeout, cbFnc, rcvFileName)
参数详细说明参考上面连接[http API章节]说明。
示例
相关实例程序在脚本库的demo\http文件夹下,此文只是摘抄其中一个实例,可以根据实际需要对demo其它内容进行研究。
执行HTTP请求的回调函数
result:true或者false,true表示成功收到了服务器的应答,false表示请求发送失败或者接收服务器应答失败
prompt:string类型,result为true时,表示服务器的应答码;result为false时,表示错误信息
head:table或者nil类型,表示服务器的应答头;result为true时,此参数为{head1=“value1”, head2=“value2”, head3=“value3”},value中不包含\r\n;result为false时,此参数为nil
body:string类型,表示接收到的应答实体数据
local function cbFnc(result,prompt,head,body)
log.info("testHttp.cbFnc",result,prompt)
if result and head then
for k,v in pairs(head) do
log.info("testHttp.cbFnc",k..": "..v)
end
end
if result and body then
log.info("testHttp.cbFnc","bodyLen="..body:len())
end
end
HTTP请求函数
“GET”,HTTP请求方法
“www.lua.org”,HTTP请求url
cbFnc,执行HTTP请求的回调函数(请求发送结果以及应答数据接收结果都通过此函数通知用户)
http.request("GET","www.lua.org",nil,nil,nil,nil,cbFnc)
常见问题
是否支持HTTPS
支持,TLSV1.2
为什么频繁请求会失败
支持的http连接总数有限,最多支持10个连接,包括lib库的连接
为什么POST JSON格式的数据会出现失败
参考http的demo,在head参数中传入{[“Content-Type”]=“application/json”}
数据接收缓存问题
有如下两种缓存机制, http.request接口可以设置使用何种缓存机制,http的demo中有详细示例可供参考
- 内存缓存:内存中有一个缓冲区,在项目剩余可用内存的范围内,此缓冲区没有大小限制,例如项目可用内存剩余200KB,则此缓冲区的理想最大值是200KB;收到的数据都会缓存到此缓冲区,如果收到的数据超过缓冲区大小,会导致内存不足重启;数据接收完整后,通过回调函数传出缓冲区数据,供用户应用脚本使用
注意:缓冲区位于内存中,断电或者重启后,缓冲区中的数据会被清空;如果接收的数据过多,不建议使用内存缓存的机制,可能会导致内存不足重启
2) 文件缓存:接收到的数据可以保存在文件中,在文件系统剩余空间的范围内,此文件没有大小限制,例如项目剩余文件系统空间200KB,则此文件的理想最大值是200KB;收到的数据都会保存到此文件中,如果收到的数据文件最大值,会导致保存失败,新数据被丢弃;数据接收完整后,通过回调函数传出文件完整路径,供用户应用脚本使用
注意:文件位于文件系统中,断电或者重启后,文件不会被自动清空删除;如果文件已经不再使用,一定要通过os.remove接口将文件删除。否则会一直占用文件系统空间,导致可用文件系统空间变小
相关资料以及购买链接
如何使用http.request接口
手把手教你用Air724UG做一个Weather APP
相关开发板购买链接
Air724UG开发板
Air724 开发板使用说明