Lua+luasocket笔记

简介

最近项目接触到Openwrt的编译和使用,op本身是一个定制的linux系统,兼容的包和语言也有很多,随着物联网的发展,相信在路由器方面的应用会越来越多,lua、shell本身是小巧并且适用于运行在小内存机子上的脚本语言,而lua的速度和使用更偏向于面向对象的高级语言,所以暂时选择lua来配置路由器以及访问远程api对数据进行交互。

OpenWrt上使用lua库

  1. op已经支持lua,但是如果要用到其他库比如 http socket等需要进行安装:
//opkg 类似于ubuntu apt-get ,是openwrt的包管理器
opkg update
//Luarocks 是Lua的包管理器
opkg instsall luarocks 
// 安装luasocket
luarocks install luasocket
  1. 安装luasocket之后可以直接用require进行引用,下面贴出GET和POST的方法
    lua的语法和返回值,如果是https的访问需要应用"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格式的数据
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)
}
  1. 使用dkjson对数据进行解析示例
    官网有使用示例:dkjson下载地址
    接上文代码的示例:
--api返回json数据的解析
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 转json格式
local tabledata  = --table格式的数据
local jsondata =  json.encode (tabledata, { indent = true })
print(jsondata)

你可能感兴趣的:(Lua+luasocket笔记)