簡介
最近項目接觸到Openwrt的編譯和使用绍豁,op本身是一個定制的linux系統(tǒng),兼容的包和語言也有很多,隨著物聯(lián)網(wǎng)的發(fā)展敬飒,相信在路由器方面的應(yīng)用會越來越多,lua无拗、shell本身是小巧并且適用于運行在小內(nèi)存機子上的腳本語言,而lua的速度和使用更偏向于面向?qū)ο蟮母呒壵Z言揽惹,所以暫時選擇lua來配置路由器以及訪問遠程api對數(shù)據(jù)進行交互。
OpenWrt上使用lua庫
- op已經(jīng)支持lua搪搏,但是如果要用到其他庫比如 http socket等需要進行安裝:
//opkg 類似于ubuntu apt-get ,是openwrt的包管理器
opkg update
//Luarocks 是Lua的包管理器
opkg instsall luarocks
// 安裝luasocket
luarocks install luasocket
- 安裝luasocket之后可以直接用require進行引用慕嚷,下面貼出GET和POST的方法
lua的語法和返回值,如果是https的訪問需要應(yīng)用"ssl.https"
local http=require("socket.http")
local https = require("ssl.https")
local ltn12 = require("ltn12")[簡書](http://jianshu.io)
local json = require ("dkjson")
local response_body = {}
local res, code, headers = https.request{
url = "https://api.abc.com/abc",
method = "GET",
headers =
{
--我在項目中使用oauth進行api連接毕泌,所以加上了authorization
["Authorization"] = "Bearer a4543f57fad1031d4815764620e094bfe6c80497"
},
sink = ltn12.sink.table(response_body)}
}
local postdata = --table格式的數(shù)據(jù)
local response_body = {}
local request_body = json.encode (postdata, { indent = true })
local res, code, headers = https.request{
url = "https://api.abc.com/abc",
method = "POST",
headers =
{
["Authorization"] = "Bearer a4543f57fad1031d4815764620e094bfe6c80497"
["Content-Type"] = "application/json";
["Content-Length"] = request_body:len();
},
source = ltn12.source.string(request_body),
sink = ltn12.sink.table(response_body)
}
- 使用dkjson對數(shù)據(jù)進行解析示例
官網(wǎng)有使用示例:dkjson下載地址
接上文代碼的示例:
--api返回json數(shù)據(jù)的解析
if type(response_body) == "table" then
local res = table.concat(response_body)
local obj, pos, err = json.decode (res, 1, nil)
if err then
print ("Error:", err)
else
print ("key1", obj.key1)
end
else
print("Not a table:", type(response_body))
end
--table 轉(zhuǎn)json格式
local tabledata = --table格式的數(shù)據(jù)
local jsondata = json.encode (tabledata, { indent = true })
print(jsondata)