|
@@ -0,0 +1,106 @@
|
|
|
|
|
+
|
|
|
|
|
+-- LuaTools需要PROJECT和VERSION这两个信息
|
|
|
|
|
+PROJECT = "httpdemo"
|
|
|
|
|
+VERSION = "1.0.0"
|
|
|
|
|
+
|
|
|
|
|
+--[[
|
|
|
|
|
+本demo需要http库, 大部分能联网的设备都具有这个库
|
|
|
|
|
+http也是内置库, 无需require
|
|
|
|
|
+]]
|
|
|
|
|
+
|
|
|
|
|
+-- sys库是标配
|
|
|
|
|
+_G.sys = require("sys")
|
|
|
|
|
+--[[特别注意, 使用http库需要下列语句]]
|
|
|
|
|
+_G.sysplus = require("sysplus")
|
|
|
|
|
+
|
|
|
|
|
+sys.taskInit(function()
|
|
|
|
|
+ -----------------------------
|
|
|
|
|
+ -- 统一联网函数, 可自行删减
|
|
|
|
|
+ ----------------------------
|
|
|
|
|
+ if wlan and wlan.connect then
|
|
|
|
|
+ -- wifi 联网, ESP32系列均支持
|
|
|
|
|
+ local ssid = "uiot"
|
|
|
|
|
+ local password = "czcjhp1985cbm"
|
|
|
|
|
+ log.info("wifi", ssid, password)
|
|
|
|
|
+ -- TODO 改成esptouch配网
|
|
|
|
|
+ LED = gpio.setup(12, 0, gpio.PULLUP)
|
|
|
|
|
+ wlan.init()
|
|
|
|
|
+ wlan.setMode(wlan.STATION)
|
|
|
|
|
+ wlan.connect(ssid, password, 1)
|
|
|
|
|
+ local result, data = sys.waitUntil("IP_READY", 30000)
|
|
|
|
|
+ log.info("wlan", "IP_READY", result, data)
|
|
|
|
|
+ device_id = wlan.getMac()
|
|
|
|
|
+ elseif mobile and mobile.imei then
|
|
|
|
|
+ -- Air780E/Air600E系列
|
|
|
|
|
+ --mobile.simid(2)
|
|
|
|
|
+ LED = gpio.setup(27, 0, gpio.PULLUP)
|
|
|
|
|
+ device_id = mobile.imei()
|
|
|
|
|
+ log.info("ipv6", mobile.ipv6(true))
|
|
|
|
|
+ sys.waitUntil("IP_READY", 30000)
|
|
|
|
|
+ elseif w5500 then
|
|
|
|
|
+ -- w5500 以太网, 当前仅Air105支持
|
|
|
|
|
+ w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
|
|
|
|
|
+ w5500.config() --默认是DHCP模式
|
|
|
|
|
+ w5500.bind(socket.ETH0)
|
|
|
|
|
+ LED = gpio.setup(62, 0, gpio.PULLUP)
|
|
|
|
|
+ sys.wait(1000)
|
|
|
|
|
+ -- TODO 获取mac地址作为device_id
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
|
|
+ -- 打印一下支持的加密套件, 通常来说, 固件已包含常见的99%的加密套件
|
|
|
|
|
+ if crypto.cipher_suites then
|
|
|
|
|
+ log.info("cipher", "suites", json.encode(crypto.cipher_suites()))
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
|
|
+ -------------------------------------
|
|
|
|
|
+ -------- HTTP 演示代码 --------------
|
|
|
|
|
+ -------------------------------------
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ while 1 do
|
|
|
|
|
+ -- 最普通的Http GET请求
|
|
|
|
|
+ local code, headers, body = http.request("GET", "https://www.air32.cn/").wait()
|
|
|
|
|
+ log.info("http.get", "air32.cn", code)
|
|
|
|
|
+ sys.wait(100)
|
|
|
|
|
+
|
|
|
|
|
+ -- ipv6测试, 仅EC618系列支持
|
|
|
|
|
+ local code, headers, body = http.request("GET", "https://mirrors6.tuna.tsinghua.edu.cn/", nil, nil, {ipv6=true}).wait()
|
|
|
|
|
+ log.info("http.get", "ipv6", code, json.encode(headers or {}), body and #body or 0)
|
|
|
|
|
+ sys.wait(100)
|
|
|
|
|
+
|
|
|
|
|
+ -- 一个比较特别的外网URL, 获取地震信息的
|
|
|
|
|
+ local url ="https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson"
|
|
|
|
|
+ local code, headers, body = http.request("GET", url).wait()
|
|
|
|
|
+ log.info("http.get", "earthquakes", code, json.encode(headers or {}), body and #body or 0)
|
|
|
|
|
+ sys.wait(100)
|
|
|
|
|
+
|
|
|
|
|
+ -- 超长URL测试
|
|
|
|
|
+ local url ="https://www.baidu.com/?fdasfaisdolfjadklsjfklasdjflka=fdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflka"
|
|
|
|
|
+ local code, headers, body = http.request("GET", url).wait()
|
|
|
|
|
+ log.info("http.get", "longurl", code, json.encode(headers or {}), body and #body or 0)
|
|
|
|
|
+ sys.wait(100)
|
|
|
|
|
+
|
|
|
|
|
+ -- 阿里云自动注册设备的验证, 不一样是200
|
|
|
|
|
+ local url ="https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device"
|
|
|
|
|
+ local req_headers = {}
|
|
|
|
|
+ req_headers["Content-Type"] = "application/x-www-form-urlencoded"
|
|
|
|
|
+ local req_body = "productKey=he1iZrw123&deviceName=861551056136351&random=2717&sign=DD31BA6E9E087A6DD88E96FD47A7AAA3&signMethod=HmacMD5"
|
|
|
|
|
+ -- req_headers["Content-Length"] = tostring(#req_body)
|
|
|
|
|
+ local code, headers, body = http.request("POST", url, req_headers, req_body).wait()
|
|
|
|
|
+ log.info("http.get", "aliyun", code, json.encode(headers or {}), body and #body or 0)
|
|
|
|
|
+ sys.wait(100)
|
|
|
|
|
+
|
|
|
|
|
+ -- Content-Length:0的情况
|
|
|
|
|
+ local code, headers, body = http.request("GET", "http://air32.cn/test/zero.txt").wait()
|
|
|
|
|
+ log.info("http.get", "emtry content", code, json.encode(headers or {}), body and #body or 0)
|
|
|
|
|
+ sys.wait(100)
|
|
|
|
|
+
|
|
|
|
|
+ sys.wait(600000)
|
|
|
|
|
+ end
|
|
|
|
|
+end)
|
|
|
|
|
+
|
|
|
|
|
+-- 用户代码已结束---------------------------------------------
|
|
|
|
|
+-- 结尾总是这一句
|
|
|
|
|
+sys.run()
|
|
|
|
|
+-- sys.run()之后后面不要加任何语句!!!!!
|