青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統(tǒng)計

最新評論

用shell寫cgi --------- 一個解析cgi參數(shù)的SHELL腳本(轉)

 測試工作中,經常會涉及到一些要驗證服務器對某些cgi接口查詢結果返回信息進行解析是否正確的情況。而提供cgi接口的通常又是另外的部門,測試的時候需要調試一些返回結果不方便。所以需要自己模擬虛假的cgi接口來達到同樣的目的。

      比如說,類似http://www.yousite.com/query.cgi?username=***&kind=*** 這樣的接口會根據(jù)username和kind的值的不同返回6類結果,每一類結果,請求服務器都會針對地走不同的處理流程,這就需要每一個返回結果都需要 模擬到,于是乎,建立模擬的cgi接口勢在必行。以前自己也沒有接觸過cgi程序,翻了一些基礎資料發(fā)現(xiàn)總體框架也不是很復雜,而解析html發(fā)過來的參 數(shù)有不少現(xiàn)成的程序可以使用,不用自己寫了。因為只是需要簡單的模擬返回結果,所以用shell寫cgi程序,開始用了uncgi解析,配置很方便,具體 方法可以看:

http://www.midwinter.com/~koreth/uncgi.html

 

后來又發(fā)現(xiàn)一個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.            fp@informatik.uni-frankfurt.de
#
# All variables in here are prefixed by _F_, so you shouldn't have
# any conflicts with your own var names
#
# get query string. if $REQUEST_METHOD is "POST", then it must be read
# from stdin, else it's in $QUERY_STRING
#
if [ ${DEBUG:-0} -eq 1 ] ; then
 echo --Program Starts-- 1>&2
fi
#
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""&"
 fi
 if [ ${DEBUG:-0} -eq 1 ] ; then
  echo --Posted String-- 1>&2
 fi
else
 _F_QUERY_STRING="$QUERY_STRING""&"
 if [ ${DEBUG:-0} -eq 1 ] ; then
  echo --Query String-- 1>&2
 fi
fi
if [ ${DEBUG:-0} -eq 1 ] ; then
 ( echo "  " $_F_QUERY_STRING
   echo --Adding Arguments-- ) 1>&2
fi
#
# 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 ] ; then
  echo "  " arg $_F_PAR 1>&2
 fi
done
if [ ${DEBUG:-0} -eq 1 ] ; then
 ( echo --With Added Arguments--
   echo "  " $_F_QUERY_STRING ) 1>&2
fi
#
# 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""http://"
 if [ ${DEBUG:-0} -eq 1 ] ; then
  ( echo --Adding Path Info--
    echo "  " $_F_PATH_INFO ) 1>&2
 fi

 while [ "$_F_PATH_INFO" != "" -a "$_F_PATH_INFO" != "/" ] ; do
  _F_QUERY_STRING="$_F_QUERY_STRING""`echo $_F_PATH_INFO | cut -d / -f 1`""&"
  _F_PATH_INFO=`echo $_F_PATH_INFO | cut -s -d / -f 2-`
 done
fi
#
# 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>&2
fi
#
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=""
 fi

 if [ ${DEBUG:-0} -eq 1 ] ; then
  ( echo --Got Variable--
    echo "  " var=$_F_VAR
    echo "  " val=$_F_VAL
    echo "  " rem=$_F_QUERY_STRING ) 1>&2
 fi
 if [ "$_F_VAR" = "" ] ; then
  continue
 fi

#
# replace '+' by spaces
#

 _F_VAL="$_F_VAL""++"
 _F_TMP=

 while [ "$_F_VAL" != "" -a "$_F_VAL" != "+" -a "$_F_VAL" != "++" ] ; do
  _F_TMP="$_F_TMP""`echo $_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"" "
  fi
 done

 if [ ${DEBUG:-0} -eq 1 ] ; then
  echo "  " vrs=$_F_TMP 1>&2
 fi

#
# 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_VAL""`echo $_F_TMP | cut -d % -f 1`"
  _F_TMP=`echo $_F_TMP | cut -s -d % -f 2-`

  if [ "$_F_TMP" != "" -a "$_F_TMP" != "%" ] ; then
   if [ ${DEBUG:-0} -eq 1 ] ; then
    echo "  " got hex "%" $_F_TMP 1>&2
   fi
   _F_HEX=`echo $_F_TMP | cut -c 1-2 | tr "abcdef" "ABCDEF"`
   _F_TMP=`echo $_F_TMP | cut -c 3-`
#
# can't handle newlines anyway. replace by space
#
#   if [ "$_F_HEX" = "0A" ] ; then
#    _F_HEX="20"
#   fi

   _F_VAL="$_F_VAL""`/bin/echo '\0'\`echo "16i8o"$_F_HEX"p" | dc\``"
  fi
 done

#
# 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>&2
 fi

# /bin/echo "FORM_$_F_VAR"=\'$_F_VAL\'
 /bin/echo "FORM_$_F_VAR"="'"$_F_VAL"'"
done
#
if [ ${DEBUG:-0} -eq 1 ] ; then
 echo done. 1>&2
fi
#
# done.
#
exit 0

 

 

  使用方法:

       在自己的cgi腳本中直接調用這個shell解析參數(shù)即可,如:

       eval `proccgi.sh $*`        # 可以把proccgi.sh放在你服務器的cgi-bin目錄

      如果上面的調用出錯,嘗試用絕對路徑調用  eval `/home/www/cgi-bin/proccgi.sh $*`

 

 

      例子,比如有一個cgi接口,按照下面的參數(shù)調用:

      http://your-website/cgi-bin/mycript?username=your_name&password=mypass

      返回結果:

      your_name

      mypass

 

    則,mycript的內容為:

 

#!/bin/sh

eval `/home/www/cgi-bin/proccgi.sh $*`

echo Content-type: text/plain

echo

echo $FORM_username

echo $FORM_password

 

 

 

 

  

      參數(shù)里面每一對key/value存儲在$FORM_key 環(huán)境變量里面。
 

順便貼一下cgi-bin目錄的通用配置

 

 

 

        ScriptAlias /cgi-bin/ /home/www/c

分類: linux 學習

posted on 2013-01-16 19:37 大龍 閱讀(3015) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            激情小说另类小说亚洲欧美 | 亚洲日本视频| 久久亚洲国产精品一区二区 | 欧美激情欧美狂野欧美精品| 在线观看91精品国产麻豆| 久久蜜桃精品| 欧美xxx在线观看| 一本久道久久久| 亚洲一区二区精品视频| 国产午夜精品久久久久久久| 久久久久久久综合狠狠综合| 久久久水蜜桃| 在线亚洲欧美视频| 亚洲一区二区三区免费视频| 国产日韩在线看片| 欧美va天堂va视频va在线| 欧美激情一区二区三区在线视频 | 国产亚洲一区二区三区在线观看| 久久久久国产一区二区| 老司机精品视频网站| 亚洲精品系列| 午夜综合激情| 亚洲欧洲日本mm| 亚洲一区二区三区免费观看| 含羞草久久爱69一区| 亚洲精品视频在线观看网站| 国产欧美日韩亚洲精品| 亚洲第一久久影院| 国产精品性做久久久久久| 免费在线观看成人av| 欧美视频一区二区三区在线观看| 久久九九久精品国产免费直播| 欧美国产一区视频在线观看| 久久精品人人做人人综合| 欧美大片va欧美在线播放| 欧美怡红院视频一区二区三区| 麻豆九一精品爱看视频在线观看免费 | 亚洲乱码久久| 韩国精品久久久999| 亚洲精品欧美日韩专区| 国产亚洲制服色| 日韩亚洲视频在线| 在线观看国产精品淫| 亚洲在线中文字幕| 99这里只有精品| 久久深夜福利免费观看| 亚洲欧美日韩在线高清直播| 欧美gay视频激情| 欧美在线看片a免费观看| 欧美精品在线观看| 免费久久99精品国产自| 国产欧美日韩一区二区三区在线| 亚洲欧洲一区二区三区久久| 黄色精品一区| 性久久久久久久| 亚洲男女自偷自拍| 欧美日韩裸体免费视频| 亚洲国产精品久久久久久女王| 狠狠色狠狠色综合人人| 午夜激情综合网| 午夜精品久久久久| 欧美视频在线观看免费网址| 亚洲国产精品一区二区www| 在线观看欧美成人| 欧美在线免费视频| 久久久久久久尹人综合网亚洲 | 久久精品一本| 久久青青草综合| 国产一区二区在线免费观看 | 模特精品裸拍一区| 伊人一区二区三区久久精品| 久久久精品一品道一区| 久久久999精品视频| 国产有码在线一区二区视频| 欧美一级专区免费大片| 久久精品av麻豆的观看方式| 国产欧美另类| 久久成人精品| 美女被久久久| 亚洲精品一区二区三区不| 欧美高清不卡| 日韩午夜在线| 午夜免费日韩视频| 国产婷婷色一区二区三区四区| 久久国产精品久久w女人spa| 老司机精品视频一区二区三区| 影音先锋欧美精品| 蜜月aⅴ免费一区二区三区| 亚洲国产高清aⅴ视频| 亚洲视频视频在线| 国产日本欧美在线观看| 久久久久天天天天| 亚洲精品日韩精品| 欧美专区在线播放| 亚洲国产精品久久久久久女王| 欧美高清视频一二三区| 在线亚洲成人| 久久深夜福利| 一区二区国产日产| 国产日产欧产精品推荐色| 久久亚洲精品中文字幕冲田杏梨| 亚洲国产一区二区视频| 亚洲一区二区三区三| 韩国福利一区| 欧美日韩中文字幕在线| 欧美一级大片在线免费观看| 亚洲国产精品久久久久婷婷老年| 亚洲一线二线三线久久久| 黄色av一区| 国产精品白丝黑袜喷水久久久| 久久精品成人一区二区三区蜜臀| 亚洲国产精品小视频| 久久精品国产欧美亚洲人人爽| 亚洲青涩在线| 国产无一区二区| 欧美日韩精品在线观看| 久久久免费观看视频| 亚洲一区二区三区高清不卡| 欧美激情精品久久久久久变态| 欧美一级免费视频| 夜夜精品视频| 91久久久亚洲精品| 国产一区二区三区成人欧美日韩在线观看 | 麻豆91精品| 亚洲欧美在线视频观看| 日韩亚洲欧美在线观看| 免费观看一区| 久久精品一本久久99精品| 亚洲香蕉在线观看| 日韩视频在线永久播放| 亚洲黄色av一区| 黄色成人片子| 国产视频观看一区| 国产精品高潮呻吟久久av无限| 欧美成ee人免费视频| 久久在线视频在线| 欧美亚洲一区二区在线| 亚洲午夜国产一区99re久久| 亚洲精品视频免费| 亚洲国产99精品国自产| 欧美成人综合网站| 久久综合给合| 久久伊人一区二区| 久久在线播放| 免费看的黄色欧美网站| 久久免费黄色| 久久久久综合一区二区三区| 久久国产日本精品| 久久久999精品| 久久精品一区二区三区不卡| 欧美一区二区在线| 久久成人资源| 久热精品视频在线观看| 鲁大师成人一区二区三区| 另类欧美日韩国产在线| 久久久欧美一区二区| 牛人盗摄一区二区三区视频| 欧美aaa级| 亚洲精品激情| 亚洲一区二区成人| 久久爱www.| 麻豆精品网站| 欧美日韩国产综合网| 欧美日韩一区二区三区在线观看免 | 99国产精品久久久久老师| 这里只有精品视频| 亚洲欧美日韩区| 久久久亚洲高清| 欧美日韩岛国| 国产精品亚洲精品| 在线观看国产成人av片| 亚洲精品中文字幕在线观看| 亚洲自拍三区| 美女视频黄免费的久久| 亚洲黄色在线观看| 亚洲一区二区三区在线| 久久久久久尹人网香蕉| 欧美精品首页| 国产亚洲欧美日韩精品| 亚洲欧洲偷拍精品| 亚洲尤物视频网| 麻豆91精品| 亚洲深夜福利视频| 久久人人97超碰人人澡爱香蕉| 欧美日韩国产综合新一区| 国产一区二区三区久久精品| 最新69国产成人精品视频免费| 亚洲一区网站| 欧美wwwwww| 午夜免费久久久久| 欧美大香线蕉线伊人久久国产精品| 国产精品久久久久久一区二区三区| 一区二区视频在线观看| 亚洲一卡久久| 欧美激情一区二区三区蜜桃视频| 亚洲欧美精品中文字幕在线| 欧美激情在线有限公司| 激情久久久久久久久久久久久久久久| 亚洲一区二区免费视频| 欧美成人一二三|