LuCI的RPC接口使用方法详解
说明:这篇文章的部分内容来自于LuCI Wiki:http://luci.subsignal.org/trac/wiki/Documentation/JsonRpcHowTo,本文只是添加了一些示例和说明。
LuCI是一个基于Lua语言开发的Web framework,提供UCI(统一配置接口)的web接口。LuCI也提供了一种基于JSON语法的RPC机制来访问其内部的库。当前LuCI提供了5个库的接口,分别是:auth、uci、fs、sys、ipkg。下面简单介绍一下使用方法,以及如何通过官方文档来构造json请求数据
AUTH库
认证过程是所有其他操作的前提,因为其他操作都需要auth认证成功后产生的token,否则会返回403错误。我们来看一下auth过程是怎么样的。下文所有RPC的操作都是使用curl工具。
$ curl -i -X POST -d '{"method":"login","params":["root","1"]}' http://192.168.1.10:8080/luci/rpc/auth
HTTP/1.1 200 OK
Server: LuCId-HTTPd/1.0
Expires: 0
Content-Type: application/json
Cache-Control: no-cache
Date: Mon, 17 Mar 2014 17:27:30 GMT
Set-Cookie: sysauth=72fe65ae2dd4c8e77623576faba4ac4c; path=/
Connection: close
{"id":null,"result":"72fe65ae2dd4c8e77623576faba4ac4c","error":null}
简单说明一下,上面的命令是使用curl工具通过POST方式发送了一个http请求,请求的内容是一个登陆请求
{"method":"login","params":["root","1"]}
http返回的内容是json格式的字符串,其中result的值就是上面提到了token。OK,现在我们拿到了下面其他操作需要的关键字段TOKEN
另外,需要注意的是,LuCI在openwrt里的网址是:http://192.168.1.10/cgi-bin/luci/rpc/xxx,多了一个cgi-bin。这是因为openwrt默认使用uhttpd作为web server。而在PC里使用make runhttpd启动的是lua web server。
SYS库
sys库提供了一下系统通用功能,比如说:执行一条命令,查看系统信息,重启等。具体功能请猛戳这个链接:http://luci.subsignal.org/api/luci/modules/luci.sys.html
这里找一个最简单来演示一下如何使用官方文档构造json数据,查看uptime时间。首先,我们看一下sys.uptime的官网说明:
uptime ()
Returns the current system uptime stats.
Return value:
String containing total uptime in seconds
uptime函数返回一个设备从上电到现在的总时间(秒)。那么,看一下使用HTTP请求来调这个函数的方法,还是curl模拟:
curl -i -X POST -d '{"method":"uptime"}' http://192.168.1.10:8080/luci/rpc/sys?auth=72fe65ae2dd4c8e77623576faba4ac4c
HTTP/1.1 200 OK
Server: LuCId-HTTPd/1.0
Expires: 0
Content-Type: application/json
Cache-Control: no-cache
Date: Mon, 17 Mar 2014 17:49:42 GMT
Set-Cookie: sysauth=72fe65ae2dd4c8e77623576faba4ac4