Luat实例教程:http功能

本示例实现的功能是:http功能测试

1.在编辑工具建立一个test.lua的文件(不一定叫这个名字,用户可以自己随便取名)

2.设置本文件被全体可见。也就意味着,一旦test被某一文件加载,则test在任何文件中均可被看见,即test中全局变量和函数均可被任何文件调用。

module(...,package.seeall)

3.test文件头需要 require "xxx" 模块。加载后,就可以调用xxx.lua库文件中的全局变量和函数了

require"misc"
require"http"
require"common"

4.定义print函数,调试用

local function print(...)
    _G.print("test",...)
end

5.创建http客户端,并进行连接

local ADDR,PORT ="36.7.87.100",81
--测试POST方法时所用地址
--local ADDR,PORT ="www.luam2m.com",80
local httpclient
function http_run()
    --因为http协议必须基于“TCP”协议,所以不必传入PROT参数
    httpclient=http.create(ADDR,PORT)   
    --建立http连接
    connect()   
end

6.编写connect()函数以及其回调函数

local function connect()
    httpclient:connect(connectedcb,sckerrcb)
end
--SOCKET connected 成功回调函数
local function connectedcb()
    --GET默认方法
    --设置URL
    httpclient:seturl("/")
    --添加首部,注意Host首部的值与上面的addr,port一致
    httpclient:addhead("Host","36.7.87.100")
    httpclient:addhead("Connection","keep-alive")
    --添加实体内容
    httpclient:setbody("")
    --调用此函数才会发送报文,需要使用POST方式时,将GET改为POST
    httpclient:request("GET",rcvcb)
end 
--SOCKET失败回调函数
local function sckerrcb(r)
    print("sckerrcb",r)
end

7.编写接收回调函数

local function rcvcb(result,statuscode,head,body)
    print("resultrcvcb: ",result)  
    print("statuscodercvcb: ",statuscode)
    if  head==nil   then    print("headrcvcb:   nil")
    else
        print("headrcvcb:")
        --遍历打印出所有头部,键为首部名字,键所对应的值为首部的字段值
        for k,v in pairs(head) do       
            print(k..": "..v)
        end
    end
    print("bodyrcvcb:",body)
    httpclient:disconnect(discb)
end

8.定时器调用run函数运行

sys.timer_start(http_run,5000)

9.在编辑工具中建立一个名为main.lua的文件。lua脚本的执行从main.lua开始,main.lua是入口文件(注意:main.lua只能有一个)。在main.lua中把test加载进去就好了。sys.init()是对系统初始化,sys.run()是系统主程序。这两句必须有。

--重要提醒:必须在这个位置定义MODULE_TYPE、PROJECT和VERSION变量
--MODULE_TYPE:模块型号,目前仅支持Air201、Air202、Air800
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
MODULE_TYPE = "Air202"
PROJECT = "HTTP"
VERSION = "1.0.0"
require"sys"
require"test"
if MODULE_TYPE=="Air201" then
require"wdt"
end
sys.init(0,0)
sys.run()

!!!attention

一个工程只有一个main.lua

发表评论

电子邮件地址不会被公开。 必填项已用*标注