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中操作字典之setdefault()方法的使用
May 21 Python
Python Flask基础教程示例代码
Feb 07 Python
Python切片操作实例分析
Mar 16 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
Python地图绘制实操详解
Mar 04 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
tensorflow 环境变量设置方式
Feb 06 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
Python源码解析之List
May 21 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初学者头痛的十四个问题
2006/07/12 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
python实现滑雪游戏
2020/02/22 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
西班牙手机之家:Phone House
2018/10/18 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
竞争上岗演讲稿
2014/01/05 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python