Python的CGIHTTPServer交互实现详解


Posted in Python onFebruary 08, 2018

介绍

对于服务器后端开发者而言,有时候需要把自己的一些服务直接暴露给PM或者其他RD使用,这个时候需要搭建一套web服务可以和前端用户做简单交互,按照最常规的做法,一般是用Apache或者Nginx作为webserver后端使用cgi或者fcgi程序或者脚本进行处理,当然这种做法安全且正规。

但是我个人更喜欢一个更简单的做法:就是利用python自带的CGIHTTPServer作为服务器,然后通过一个简单的html页面进行交互,通过post请求直接调用总控脚本,与用户进行交互。

Python的CGIHTTPServer交互实现详解

使用方法和示例

启动服务

Python的CGIHTTPServer一般是与python一起安装的,使用如下命令既可以启动,为了便于组织目录,建议先建立一个目录,比如web,然后再运行下面的命令。

nohup python -m CGIHTTPServer 8088 &

上面的命令使CGIHTTPServer在非中断后台运行,运行log可以通过当前目录下的nohup.out查看。

编写交互页面

在启动server的当前目录下,建立一个index.html文件,编写内容如下。

<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gbk">
  <title> Python-CGIHTTPServer使用示例 </title>
  <meta name="author" content="Haiyu">
  <center><h1> Python-CGIHTTPServer使用示例 </h1></center>
 </head>
 <hr style="height:5px;border:none;border-top:5px ridge green;" />
 <body>
  <br/>
  <center><h2>计算圆的周长</h2></center>
  <center>
  <p>请输入圆的半径长度.</p>
  <br/>
  <form action="cgi-bin/c_length.sh" method="post" enctype="text/plain" target="_blank">
   radius:<input type="text" id="radius" name="radius" value=""/>
   <input type="submit" id="c_length" name="c_length" value="计算周长">
  </form>
  </center>
  <br/>
  <br/>
  <br/>
 </body>
 <hr style="height:5px;border:none;border-top:5px ridge green;" />
 <br/>
 <br/>
</html>

这个界面的功能非常简单,使用一个form表单接收用户的提交的半径参数,然后计算完周长之后进行返回,使用post请求。

CGI脚本

这个才是我们后端开发同学最关心的内容,这个脚本就是用来完成主要的逻辑操作进行返回,因为我们后端同学关注更多的不是交互界面的华丽而是逻辑处理的正确性和严谨性,根据我的经验,后端不管多么复杂的处理流程,最终都可以用一个脚本包起来,根据输入得到输出,这里面的输入就是我们用户提交的参数,输出就是我们经过层层处理之后需要返回的内容。
这个脚本建议放在server运行目录下新建立的cgi-bin目录中。

#!/bin/bash

mysql_bin=/home/work/mysql/bin/mysql

echo "Content-Type:text/html; Charset=gbk"
echo ""

echo "<br/>"
radius=0
c_length=0
if [[ "$REQUEST_METHOD" == "POST" ]];then
 read vars
 echo "$vars" | awk -F "=" '{print $2}' > temp
 dos2unix temp
 radius=`cat temp`
 c_length=$(echo "scale=2;2*3.14*$radius" | bc)

 echo "<br/>"
 echo "<table border="5" cellpadding="10">"
 echo "Userid Info:"
 echo "<tr>"
 echo "<td>半径</td><td>周长</td>"
 echo "</tr>"
 echo "<tr>"
 echo "<td>"$radius"</td><td>"$c_length"</td>"
 echo "</tr>"
 echo "</table>"
fi

总结

以上就是使用Python的CGIHTTPServer进行用户交互的主要内容,其优点就是开发使用方便,让后端同学能更加专注于业务逻辑处理相关的内容。不足之处可能就是不够正规,使用有风险,因为使用的是纯CGI协议交互,记得之前排查过一个bash的cgi漏洞,使用起来可能会有风险,因此这种方式更适合开发一套对内使用的简易工具,不建议对外部用户暴露。

Python 相关文章推荐
基于python yield机制的异步操作同步化编程模型
Mar 18 Python
Python 正则表达式入门(初级篇)
Dec 07 Python
python+opencv轮廓检测代码解析
Jan 05 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 Python
python 30行代码实现蚂蚁森林自动偷能量
Feb 08 Python
总结三种用 Python 作为小程序后端的方式
May 02 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 #Python
python实现二叉查找树实例代码
Feb 08 #Python
单链表反转python实现代码示例
Feb 08 #Python
Python测试人员需要掌握的知识
Feb 08 #Python
python实现单向链表详解
Feb 08 #Python
Python生成器以及应用实例解析
Feb 08 #Python
代码分析Python地图坐标转换
Feb 08 #Python
You might like
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
PHP利用COM对象访问SQLServer、Access
2006/10/09 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
成教自我鉴定
2013/10/27 职场文书
保险专业自荐信范文
2014/02/20 职场文书
学校春季防火方案
2014/06/08 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL