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 httplib模块使用实例
Apr 11 Python
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
python实现连接mongodb的方法
May 08 Python
Python脚本文件打包成可执行文件的方法
Jun 02 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
python更改已存在excel文件的方法
May 03 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
python进程间通信Queue工作过程详解
Nov 01 Python
django从后台返回html代码的实例
Mar 11 Python
基于opencv的selenium滑动验证码的实现
Jul 24 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
第九节 绑定 [9]
2006/10/09 PHP
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
php 如何获取数组第一个值
2013/08/06 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
python实现指定字符串补全空格的方法
2015/04/30 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
Python如何优雅删除字符列表空字符及None元素
2020/06/25 Python
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
绩效专员岗位职责
2013/12/02 职场文书
四年的大学生生活自我评价
2013/12/09 职场文书
2014年终个人总结报告
2015/03/09 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
Python的这些库,你知道多少?
2021/06/09 Python
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏