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

大龍的博客

常用鏈接

統計

最新評論

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

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

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

http://www.midwinter.com/~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.            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解析參數即可,如:

       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_name

      mypass

 

    則,mycript的內容為:

 

#!/bin/sh

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

echo Content-type: text/plain

echo

echo $FORM_username

echo $FORM_password

 

 

 

 

  

      參數里面每一對key/value存儲在$FORM_key 環境變量里面。
 

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

 

 

 

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

分類: linux 學習

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


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            国产精品99久久久久久人| 亚洲欧美日韩精品久久亚洲区 | 中文亚洲欧美| 亚洲精品婷婷| 欧美性大战xxxxx久久久| 亚洲影院在线| 新片速递亚洲合集欧美合集| 国产午夜久久| 免费欧美高清视频| 欧美激情第二页| 亚洲一二三区视频在线观看| 亚洲伊人第一页| 国外精品视频| 亚洲国产日韩欧美在线图片| 欧美成人乱码一区二区三区| 日韩视频精品在线| 亚洲一区欧美一区| 伊人成人开心激情综合网| 欧美激情1区2区3区| 欧美视频在线一区二区三区| 欧美专区亚洲专区| 欧美 日韩 国产在线| 亚洲自拍偷拍色片视频| 久久精品亚洲一区二区| 亚洲精品亚洲人成人网| 亚洲影院污污.| 亚洲国产精品成人一区二区| 一区二区日韩伦理片| 国内偷自视频区视频综合| 亚洲国产mv| 国产午夜精品麻豆| 亚洲精品视频在线播放| 激情成人av| 亚洲天堂成人在线观看| 亚洲黄色精品| 欧美在线视频一区二区三区| 9久re热视频在线精品| 久久精品一区二区三区中文字幕| 一区二区免费在线播放| 久久综合久久综合久久| 亚洲欧美日韩国产中文| 欧美激情精品| 麻豆精品在线观看| 国产乱码精品一区二区三区五月婷| 欧美不卡激情三级在线观看| 国产精品永久免费在线| 99国产精品久久久| 亚洲精品免费观看| 久久久免费精品| 欧美一区二区视频在线观看2020| 欧美精品一区二区三区高清aⅴ| 久久久久久久高潮| 国产精品国产三级国产普通话99| 亚洲国产精品成人精品| 亚洲国产精品久久久久秋霞影院 | 久久这里有精品15一区二区三区| 欧美一级片一区| 国产精品美腿一区在线看| 日韩视频在线观看国产| 亚洲国产视频直播| 久热综合在线亚洲精品| 麻豆av福利av久久av| 国内在线观看一区二区三区| 欧美一区二区视频在线观看| 欧美一区二区日韩一区二区| 国产精品久久久久av免费| 一区二区三区成人| 亚洲欧美清纯在线制服| 国产精品麻豆欧美日韩ww| 亚洲午夜精品一区二区三区他趣| 亚洲视频大全| 欧美午夜影院| 亚洲一区二区日本| 久久精品国产综合| 很黄很黄激情成人| 久久伊人亚洲| 亚洲国产1区| 一区二区三欧美| 国产精品av免费在线观看 | 久久综合久久综合久久综合| 国产亚洲午夜高清国产拍精品| 午夜精品久久久久久久久久久久 | 久久久久久成人| 一区在线电影| 欧美大成色www永久网站婷| 亚洲人成绝费网站色www| 一区二区欧美亚洲| 国产伦精品一区二区三区免费| 先锋影院在线亚洲| 欧美高清视频| 亚洲一区二区3| 国产亚洲网站| 欧美激情综合在线| 亚洲欧美日韩一区二区| 麻豆视频一区二区| av不卡免费看| 国产亚洲电影| 欧美激情综合五月色丁香| 一本久久a久久精品亚洲| 久久久久久久欧美精品| 亚洲精品一区二区三| 国产欧美精品日韩精品| 免费观看久久久4p| 亚洲专区欧美专区| 欧美第一黄网免费网站| 亚洲欧美综合网| 亚洲第一在线| 国产精品午夜视频| 欧美wwwwww| 久久精品人人做人人爽| 亚洲精品极品| 免费观看国产成人| 午夜亚洲视频| 亚洲麻豆一区| 精品福利电影| 国产女主播视频一区二区| 欧美激情导航| 久久午夜激情| 西瓜成人精品人成网站| 亚洲精品乱码久久久久久日本蜜臀| 欧美在线视频一区二区| 日韩视频在线免费观看| 一区二区自拍| 国产一区二区三区四区老人| 欧美视频观看一区| 美腿丝袜亚洲色图| 久久激情视频免费观看| 亚洲欧美成人网| 一本高清dvd不卡在线观看| 欧美电影在线| 欧美成人一区二区| 免费看精品久久片| 美女视频网站黄色亚洲| 欧美一区在线看| 香蕉久久精品日日躁夜夜躁| 一区二区av在线| 亚洲精品色婷婷福利天堂| 激情亚洲网站| 精品成人在线观看| 国产在线高清精品| 韩国美女久久| 国内精品久久久久伊人av| 国产日韩精品久久久| 国产日韩欧美一区在线 | 欧美日韩在线观看一区二区| 欧美成ee人免费视频| 免播放器亚洲一区| 欧美成人国产一区二区| 欧美激情片在线观看| 欧美日韩精品在线观看| 欧美偷拍一区二区| 国产精品国产三级国产aⅴ无密码| 欧美日韩亚洲视频一区| 国产精品成人一区二区| 国产女人精品视频| 国内视频一区| 亚洲日韩第九十九页| 夜夜精品视频一区二区| 亚洲自拍偷拍福利| 欧美在线精品一区| 美国成人毛片| 最新成人av网站| 99国产精品自拍| 亚洲女女女同性video| 欧美在线观看视频| 麻豆91精品| 欧美视频在线看| 国产啪精品视频| 亚洲国产精品成人综合| 一区二区av在线| 久久大香伊蕉在人线观看热2| 久久一区二区三区四区| 欧美激情一区二区三区全黄| 制服诱惑一区二区| 久久久久国产精品一区| 欧美激情精品久久久久久免费印度| 欧美日韩一视频区二区| 国内揄拍国内精品少妇国语| 亚洲人成网站在线播| 亚洲一区在线观看视频| 米奇777超碰欧美日韩亚洲| 亚洲精品在线电影| 久久精品国产清高在天天线| 欧美激情欧美狂野欧美精品| 国产欧美日韩综合精品二区| 亚洲欧洲综合另类| 欧美中文字幕第一页| 亚洲国产经典视频| 校园春色国产精品| 欧美日韩亚洲高清一区二区| 狠狠色狠狠色综合| 亚洲自拍偷拍福利| 亚洲国产精品一区二区www在线| 亚洲综合社区| 欧美日韩1区| 亚洲二区三区四区| 久久国产欧美| 一区二区三区三区在线| 欧美精品福利在线| 在线观看国产精品淫|