龙空技术网

为uhttpd增加cgi-bin接口脚本

openwrt阿勇 262

前言:

今天兄弟们对“cgi脚本css”大致比较讲究,咱们都想要学习一些“cgi脚本css”的相关知识。那么小编在网上收集了一些对于“cgi脚本css””的相关内容,希望看官们能喜欢,兄弟们快快来了解一下吧!

在uHTTPd下使用bash shell编写cgi

什么是uHTTPd

uHTTPd 是一个 OpenWrt/LUCI 开发者从头编写的 Web 服务器。 它着力于实现一个稳定高效的服务器,能够满足嵌入式设备的轻量级任务需求,且能够与 OpenWrt 的配置框架 (UCI) 整合。默认情况下它被用于 OpenWrt 的 Web 管理接口 LuCI。当然,uHTTPd 也能提供一个常规 Web 服务器所需要的所有功能。 它的 UCI 配置文件为 /etc/config/uhttpd 其中option config /etc/httpd.conf指定了额外加载的非uci配置文件,默认为httpd.conf。例如在该文件中加入 prefix:username:password。出于向后兼容的原因,uhttpd使用旧的Busybox httpd配置文件/etc/httpd.conf来定义身份验证区域以及相关的用户名和密码。此配置文件不是UCI格式prefix是域所覆盖的URL部分,例如/cgi-bin为任何cgi程序请求基本身份验证

username指定客户端必须使用的用户名

password定义验证所需的密码

密码可以是纯文本格式、MD5编码或user格式,其中user指/etc/shadow或/etc/passwd中的帐户。

通过使用uhttpd可执行文件的-m选项,可以将纯文本密码转换为MD5编码。

参考文档

有任何http请求时的一些环境变量

#!/bin/sh#使用shell作为cgi脚本时的环境变量POST_STRING=$(cat)echo "Content-type: application/json" echo    echo POST_STRING = $POST_STRING    #post请求echo SERVER_SOFTWARE = $SERVER_SOFTWARE #服务器软件echo SERVER_NAME = $SERVER_NAME         #服务器主机名echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE    #CGI版本echo SERVER_PROTOCOL = $SERVER_PROTOCOL  #通信使用的协议echo SERVER_PORT = $SERVER_PORT         #服务器的端口号echo REQUEST_METHOD = $REQUEST_METHOD   #请求方法(GET/POST/PUT/DELETE..)echo HTTP_ACCEPT = $HTTP_ACCEPT         #HTTP定义的浏览器能够接受的数据类型echo SCRIPT_NAME = $SCRIPT_NAME         #当前运行的脚本名称(包含路径)echo QUERY_STRING = $QUERY_STRING       #地址栏中传的数据(get方式)url中?后面echo REMOTE_ADDR = $REMOTE_ADDR         #客户端的ipecho .............................echo SERVER_INTERFACE = $SERVER_INTERFACE	#WWW服务器的类型,如:CERN型或NCSA型。echo HTTP_REFERER = $HTTP_REFERER	#发送表单的文件URL。(并非所有的浏览器都传送这一变量)echo HTTP_USER-AGENT = $HTTP_USER-AGENT	#发送表单的浏览的有关信息。echo GETWAY_INTERFACE = $GETWAY_INTERFACE	#CGI程序的版本,在UNIX下为 CGI/1.1。echo PATH_TRANSLATED = $PATH_TRANSLATED	#PATH_INFO中包含的实际路径名。echo PATH_INFO = $PATH_INFO	#浏览器用GET方式发送数据时的附加路径。echo REMOTE_HOST = $REMOTE_HOST	#发送程序的主机名,不能确定该值。echo REMOTE_USER = $REMOTE_USER	#发送程序的人名。echo CONTENT_TYPE = $CONTENT_TYPE	#POST发送,一般为application/xwww-form-urlencoded。echo CONTENT_LENGTH = $CONTENT_LENGTH	#POST方法输入的数据的字节数。echo POST_STRING = $POST_STRING	#

测试脚本get请求,shell实现cgi,输出env命令的结果到html页面,也可以通过调整meta中content的值,来输出json数据

我们在openwrt系统内的/www/cgi-bin/下创建一个test.sh,如下内容

#!/bin/ash echo "Content-type: text/html" echo ""echo '<html>'echo '<head>'echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'echo '<title>Environment Variables</title>'echo '</head>'echo '<body>'echo '<h1> Environment Variables: </h1>'echo '<pre>'/usr/bin/envecho '</pre>'echo '</body>'echo '</html>'exit 0

然后访问openwrt的web页面,如下截图

正确的请求解决

如果test.sh没有可执行权限,则无法正确输出内容,且页面会提示

Forbidden

You don't have permission to access /cgi-bin/test.sh on this server.

test.sh无可执行权限

此时只需要执行chmod命令赋予权限即可

chmod 777 /www/cgi-bin/test.sh

下一个文章讲解如何编写一个shell的cgi-bin脚本获取用户输入的get请求和post请求内容

标签: #cgi脚本css