一个解析cgi参数的SHELL脚本.docx_第1页
一个解析cgi参数的SHELL脚本.docx_第2页
一个解析cgi参数的SHELL脚本.docx_第3页
一个解析cgi参数的SHELL脚本.docx_第4页
一个解析cgi参数的SHELL脚本.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一个解析cgi参数的SHELL脚本测试工作中,经常会涉及到一些要验证服务器对某些cgi接口查询结果返回信息进行解析是否正确的情况。而提供cgi接口的通常又是另外的部门,测试的时候需要调试一些返回结果不方便。所以需要自己模拟虚假的cgi接口来达到同样的目的。 比如说,类似/query.cgi?username=*&kind=*这样的接口会根据username和kind的值的不同返回6类结果,每一类结果,请求服务器都会针对地走不同的处理流程,这就需要每一个返回结果都需要模拟到,于是乎,建立模拟的cgi接口势在必行。以前自己也没有接触过cgi程序,翻了一些基础资料发现总体框架也不是很复杂,而解析html发过来的参数有不少现成的程序可以使用,不用自己写了。因为只是需要简单的模拟返回结果,所以用shell写cgi程序,开始用了uncgi解析,配置很方便,具体方法可以看:/koreth/uncgi.html后来又发现一个shell写的解析程序proccgi.sh,似乎在简单的cgi接口中使用更方便proccgi.sh文件内容如下:#!/bin/sh# Process input to a CGI script. Written and Copyright 1995 Frank Pilhofer# You may freely use and distribute this code free of charge provided that# this copyright notice remains.fpinformatik.uni-frankfurt.de# All variables in here are prefixed by _F_, so you shouldnt have# any conflicts with your own var names# get query string. if $REQUEST_METHOD is POST, then it must be read# from stdin, else its in $QUERY_STRING#if $DEBUG:-0 -eq 1 ; thenecho -Program Starts- 1&2fi#if $REQUEST_METHOD = POST ; then_F_QUERY_STRING=dd count=$CONTENT_LENGTH bs=1 2 /dev/null&if $QUERY_STRING != ; then_F_QUERY_STRING=$_F_QUERY_STRING$QUERY_STRING&fiif $DEBUG:-0 -eq 1 ; thenecho -Posted String- 1&2fielse_F_QUERY_STRING=$QUERY_STRING&if $DEBUG:-0 -eq 1 ; thenecho -Query String- 1&2fifiif $DEBUG:-0 -eq 1 ; then( echo $_F_QUERY_STRING echo -Adding Arguments- ) 1&2fi# if there are arguments, use them as well.#for _F_PAR in $* ; do_F_QUERY_STRING=$_F_QUERY_STRING$_F_PAR&if $DEBUG:-0 -eq 1 ; thenecho arg $_F_PAR 1&2fidoneif $DEBUG:-0 -eq 1 ; then( echo -With Added Arguments- echo $_F_QUERY_STRING ) 1&2fi# if $PATH_INFO is not empty and contains definitions =, append it as well.# but replace slashes by ampersands#if echo $PATH_INFO | grep = /dev/null ; then_F_PATH_INFO=$PATH_INFO/if $DEBUG:-0 -eq 1 ; then( echo -Adding Path Info- echo $_F_PATH_INFO ) 1&2fiwhile $_F_PATH_INFO != -a $_F_PATH_INFO != / ; do_F_QUERY_STRING=$_F_QUERY_STRINGecho $_F_PATH_INFO | cut -d / -f 1&_F_PATH_INFO=echo $_F_PATH_INFO | cut -s -d / -f 2-donefi# append another & to fool some braindead cut implementations. Test yours:# echo i am braindead! | cut -d ! -f 2#_F_QUERY_STRING=$_F_QUERY_STRING&#if $DEBUG:-0 -eq 1 ; then( echo -Final Query String- echo $_F_QUERY_STRING ) 1&2fi#while $_F_QUERY_STRING != -a $_F_QUERY_STRING != & ; do_F_VARDEF=echo $_F_QUERY_STRING | cut -d & -f 1#_F_QUERY_STRING=echo $_F_QUERY_STRING | cut -d & -f 2-_F_VAR=echo $_F_VARDEF | cut -d = -f 1_F_VAL=echo $_F_VARDEF= | cut -d = -f 2# Workaround for more braindead cut implementations that strip delimiters# at the end of the line (i.e. HP-UX 10)#if echo $_F_QUERY_STRING | grep -c & /dev/null ; then_F_QUERY_STRING=echo $_F_QUERY_STRING | cut -d & -f 2-else_F_QUERY_STRING=fiif $DEBUG:-0 -eq 1 ; then( echo -Got Variable- echo var=$_F_VAR echo val=$_F_VAL echo rem=$_F_QUERY_STRING ) 1&2fiif $_F_VAR = ; thencontinuefi# replace + by spaces#_F_VAL=$_F_VAL+_F_TMP=while $_F_VAL != -a $_F_VAL != + -a $_F_VAL != + ; do_F_TMP=$_F_TMPecho $_F_VAL | cut -d + -f 1_F_VAL=echo $_F_VAL | cut -s -d + -f 2-if $_F_VAL != -a $_F_VAL != + ; then_F_TMP=$_F_TMP fidoneif $DEBUG:-0 -eq 1 ; thenecho vrs=$_F_TMP 1&2fi# replace %XX by ascii character. the hex sequence MUST BE uppercase#_F_TMP=$_F_TMP%_F_VAL=while $_F_TMP != -a $_F_TMP != % ; do_F_VAL=$_F_VALecho $_F_TMP | cut -d % -f 1_F_TMP=echo $_F_TMP | cut -s -d % -f 2-if $_F_TMP != -a $_F_TMP != % ; thenif $DEBUG:-0 -eq 1 ; thenecho got hex % $_F_TMP 1&2fi_F_HEX=echo $_F_TMP | cut -c 1-2 | tr abcdef ABCDEF_F_TMP=echo $_F_TMP | cut -c 3-# cant handle newlines anyway. replace by space#if $_F_HEX = 0A ; then#_F_HEX=20#fi_F_VAL=$_F_VAL/bin/echo 0echo 16i8o$_F_HEXp | dcfidone# replace forward quotes to backward quotes, since we have trouble handling# the former ones.#_F_VAL=echo $_F_VAL | tr # if debug, send variables to stderr#if $DEBUG:-0 -eq 1 ; then( echo -Final Assignment- echo FORM_$_F_VAR=$_F_VAL ) 1&2fi#/bin/echo FORM_$_F_VAR=$_F_VAL/bin/echo FORM_$_F_VAR=$_F_VALdone#if $DEBUG:-0 -eq 1 ; thenecho done. 1&2fi# done.#exit 0使用方法: 在自己的cgi脚本中直接调用这个shell解析参数即可,如: eval proccgi.sh $* # 可以把proccgi.sh放在你服务器的cgi-bin目录 如果上面的调用出错,尝试用绝对路径调用 eval /home/www/cgi-bin/proccgi.sh $* 例子,比如有一个cgi接口,按照下面的参数调用:http:/your-website/cgi-bin/mycript?username=your_name&password=mypass 返回结果: your_namem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论