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 相关文章推荐
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 Python
python实现将汉字转换成汉语拼音的库
May 05 Python
Python实现的递归神经网络简单示例
Aug 11 Python
python生成密码字典的方法
Jul 06 Python
python xpath获取页面注释的方法
Jan 14 Python
基于python实现KNN分类算法
Apr 23 Python
Django分页功能的实现代码详解
Jul 29 Python
详解python中index()、find()方法
Aug 29 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
Python对象的属性访问过程详解
Mar 05 Python
基于python 取余问题(%)详解
Jun 03 Python
python实现银行账户系统
Feb 22 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/11/10 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
php常用数学函数汇总
2014/11/21 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
python列表的常用操作方法小结
2016/05/21 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
生产管理的三大手法
2013/11/11 职场文书
客服部班长工作责任制
2014/02/25 职场文书
初级党校心得体会
2014/09/11 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers