设为首页 收藏本站
查看: 721|回复: 0

bash-shell做CGI,用于获取HTTP POST提交的数据

[复制链接]

尚未签到

发表于 2018-8-18 11:10:19 | 显示全部楼层 |阅读模式
  由于对HTTP/CGI的工作模式不了解,在网络上找了许久用shell做CGI来提取POST,最终找到了,发现年头挺久的了,http://www.fpx.de/fp/Software/ProcCGIsh.html(其中还有C实现和TCL实现)。
  下载地址:http://www.fpx.de/fp/Software/proccgi.sh
  贴出shell脚本内容:
  


  • #!/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""//"
  •     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
  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-553381-1-1.html 上篇帖子: UNIX和Linux Shell正则表达式语法介绍 下篇帖子: if嵌套语句 shell脚本实例 测试是否闰年
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表