在uHTTPd下使用bash shell编写cgi

在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编码。

参考文档

Bash CGI

Web CGI with Bash Script

PostMan Tester

测试

uHTTPd passes 'GET' paramter to bash by '$QUERY_STRING’

uHTTPd passes 'POST' conent to bash by STDIN, so bash use ‘POST_STRING=$(cat)’ to get them

vi /www/cgi-bin/test.cgi

#!/bin/sh                    
POST_STRING=$(cat)                    
echo "Content-type: application/json" 
echo    
echo POST_STRING = $POST_STRING
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         #客户端的ip
echo .............................
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	#
#!/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/env
echo '</pre>'
echo '</body>'
echo '</html>'

exit 0
发布了73 篇原创文章 · 获赞 39 · 访问量 6782

猜你喜欢

转载自blog.csdn.net/hzlarm/article/details/103531885
今日推荐