天天看点

3Openwrt自定义CGI实现 前后端交互

 安装uhttpd。

在编译openwrt前,输入make memuconfig,查找Network -> Web Servers/Proxies -> uhttpd,如果没勾选则勾选。然后编译固件。

修改uhttpd配置。

安装运行openwrt后,通过ssh登陆,修改/etc/config/uhttpd配置文件,在文件末尾添加新的web服务。添加数据基本格式如下:

其中:

<col>

名称

说明

uhttpd

服务名称,不要和系统的重名即可

home

服务的根目录

listen_http

CGI前缀,用来区分是否调用的CGI

cgi_prefix

还有其他配置,不一一列举,比如index_page 、error_page 、listen_https、cert、key、script_timeout、network_timeout、tcp_keepalive等。

修改后需要重启uhttpd,使用命令:

配置静态页面。

在服务的根目录下配置web页面,比如index.html(如果uhttpd配置未指定,则为默认页面)。如下是一个网上找到的登陆网页:

当用户点击登陆时,会跳转访问当前目录下的/cgi-bin/helloworld。

编写CGI程序。

例如上一步的/cgi-bin/helloworld即为web服务的CGI程序。本文介绍通过ipk的方式安装CGI程序的方法。

生成ipk需要借助openwrt的交叉编译,首先在openwrt目录下的package目录下建立一个目录,本例为:helloworld。然后在helloworld目录下建立Makefile文件和src目录。其中Makefile文件的内如如下:

其中制定安装路径为web服务的CGI路径。

src目录下放入自己的程序及Makefile,本例中有:

helloworld.c内容如下:

Makefile内容如下:

使用openwrt编译好后,把ipa通过scp上传到路由器下(或直接编译到固件中),安装:

之后就会在/root/cgi-bin下看见helloworld程序。调用程序能正常输出网页:

结果输出

浏览器就会打开默认页面(192.168.8.106是测试路由器地址),点击默认页面的确定按钮,就会返回CGI的输出,如下图: