boa-0.94.13:Form CGI Echo

2014-11-24 03:09:21 · 作者: · 浏览: 1

说明,部分代码来源网络

Form CGI 是什么

这是我自己起的名字。CGI通用网关接口程序,如果不能从客户端浏览器获取参数,将没有任何意义。那么CGI程序如何获取客户端用户输入的参数呢?这里主要依靠HTTP的GET和POST方法,提取HTML的form表单项目,组成name1=value1&name2=value2....格式的字符串。这样的字符串有一个名字叫做URLEndcode,这也是有标准定义的,具体可以百度一下。

Web服务器收到后,将此字符串放入环境变量QUERY_STRING中,CGI程序通过解析QUERY_STRING还原浏览器客户端参数。CGI程序在得到这些参数后,就可以做自己的事情了,做完之后,不要忘了把处理结果返回给浏览器。

ECHO测试

FormCGI ECHO测试就是用户通过浏览器输入什么内容,CGI程序接收后返给用户的内容就是什么。

测试页面

页面测试效果如图1所示,form表单项目有name,email和msg。由于页面HTML代码比较多,可以到这里下载测试:cgi_form.html。

\

图1

当用户点击Call CGI按钮后,成功将用户输入提交给了cgi_form.sh程序,cgi_form.sh程序最终将用户输入的内容又返回给浏览器。效果如下图2所示。

\

图2

CGI程序

浏览器网提交给服务器的是这样的字符串:

cgi_form.sh name=hyx&email=hyx@abc.com&msg=hello+cgi+form&action=Call+CGI

其中cgi_form.sh是CGI程序,用户输入的参数都在里面,cgi_form.sh通过解析上面问号后面的字符串,得到参数值,然后将参数值返回给浏览器。

用Shell脚本解析字符串(URLDecode编码),从网上找到了一个现成的脚本来实现字符串解析。它的名字叫proccgi.sh,可网上搜索下载,也可以去这下载proccgi.sh。

以下是cgi_form.sh的全部内容:

#!/bin/sh

eva l `./proccgi.sh $*`

echo "Content-type:text/html"

echo ""

echo ""

echo "CGI Form"

echo ""

echo "

Server Got you parametes! Right! ^_^

" echo "

Name :$FORM_name

" echo "

Email :$FORM_email

" echo "

Message : $FORM_msg

" echo "" echo ""

总结

如果CGI程序要处理用户参数,必须要有解析QUERY_STRING的功能,说的规范点就是必须有符合CGI 1.1规范的解析程序。比如本例中使用到的proccgi.sh就是一个shell脚本处理CGI参数,具体用法已经体现在cgi_form.sh脚本中。

问题&思考

由于我使用的浏览器是win7中文版IE,cgi_form.html也没有指定内容的字符集,IE浏览器打开测试页面cgi_form.html自动选择简体中文。如果通过浏览器输入中文,提交以后会是什么效果呢?

下一遍文章将会对这一问题与思考给出解释与解决方案。