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装饰器使用方法实例
Nov 21 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
python中的代码编码格式转换问题
Jun 10 Python
python中子类调用父类函数的方法示例
Aug 18 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
python 安装impala包步骤
Mar 28 Python
基于python调用jenkins-cli实现快速发布
Aug 14 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
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
php 生成短网址原理及代码
2014/01/23 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
javascript实现别踩白块儿小游戏程序
2015/11/22 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
python任务调度实例分析
2015/05/19 Python
Python实现截屏的函数
2015/07/25 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
学习Python爬虫的几点建议
2020/08/05 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
python中的列表和元组区别分析
2020/12/30 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
大学专科生推荐信范文
2013/11/23 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
如何撰写促销方案?
2019/07/05 职场文书
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS