python下的web服务模块有三种:

  BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler

  SimpleHTTPServer: 包含执行GET和HEAD请求的SimpleHTTPRequestHandler类

  CGIHTTPServer: 包含处理POST请求和执行CGIHTTPRequestHandler类。

下面是CGIHTTPServer类示例:

 root@u254:~/cp# tree
.
|-- cgi-bin
| |-- get_info.py
| |-- get_info.pyc
| `-- hick.py
`-- http.py http.py
#!/usr/bin/python
#encoding=utf-8
#supported by python2.7 import sys
from CGIHTTPServer import CGIHTTPRequestHandler
from BaseHTTPServer import HTTPServer
server_addr = ('192.168.2.18', 20014)
httpd = HTTPServer(server_addr, CGIHTTPRequestHandler)
httpd.serve_forever() hick.py
#!/usr/bin/python
#encoding=utf-8
#supported python2.7 import cgi
import sys
form = cgi.FieldStorage()
name = form["access"].value #获取get传递的参数 print "HTTP/1.0 200 OK"
print "Content-Type:text/html"
print ""
print ""
print "name %s"% name  
print ""

执行效果图如下:  

SimpleHTTPServer示例:

 root@u254:~/cp# tree
.
|-- get_info.py
|-- get_info.pyc
`-- http2.py get_info.py如下:
#!/usr/bin/python
#encoding=utf-8
#supported python2.7 import commands
import json def GetInfo(id):
cmd = "radosgw-admin -c /etc/ceph/ceph.conf bucket stats --uid="+ str(id) +" --categories={}"
#cmd = "radosgw-admin bucket stats --uid=37 --categories={} --access=radosgw-admin --access-key=37 --secret=IXJcIub8Zprn7Vu+Tm3VId0LdrnMCfgpZ6sSb9zc"
dict_t = {}
content = commands.getoutput(cmd)
#print content
if content.find(")") != -1:
en_json = json.loads(content.split(')')[1])
else:
en_json = json.loads(content)
for element in en_json:
if "bucket" in element.keys() and "usage" in element.keys():
#print element["bucket"]
if "rgw.main" in element["usage"].keys() and "size_kb_actual" in element["usage"]["rgw.main"].keys():
#print element["usage"]["rgw.main"]["size_kb_actual"]
dict_t.setdefault(element["bucket"], element["usage"]["rgw.main"]["size_kb_actual"])
else:
dict_t.setdefault(element["bucket"], 0)
#print json.dumps(dict_t)
return json.dumps(dict_t) if __name__ == "__main__":
GetInfo(37) http2.py如下:
#!/usr/bin/pyton
#encoding=utf-8
#supported by python2.7 #encoding=utf-8
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import io,shutil
import urllib,time
import sys
sys.path.append(r'./')
import getopt,string
import get_info class MyRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.process(2)
def do_POST(self):
self.process(1) def process(self,type):
content =""
if type==1:
datas = self.rfile.read(int(self.headers['content-length']))
datas = urllib.unquote(datas).decode("utf-8", 'ignore')
datas = transDicts(datas)
if datas.has_key('data'):
content = "data:"+datas['data']+"\r\n" if '?' in self.path:
query = urllib.splitquery(self.path)
action = query[0]
if query[1]:
queryParams = {}
for qp in query[1].split('&'):
kv = qp.split('=')
print kv[1]
kv[1] = get_info.GetInfo(kv[1])
queryParams[kv[0]] = urllib.unquote(kv[1]).decode("utf-8", 'ignore')
#content+= kv[0]+':'+queryParams[kv[0]]+"\r\n"
content+= queryParams[kv[0]]+"\r\n" enc="UTF-8"
content = content.encode(enc)
f = io.BytesIO()
f.write(content)
f.seek(0)
self.send_response(200)
self.send_header("Content-type", "text/html; charset=%s" % enc)
self.send_header("Content-Length", str(len(content)))
self.end_headers()
shutil.copyfileobj(f,self.wfile)
def transDicts(params):
dicts={}
if len(params)==0:
return
params = params.split('&')
for param in params:
dicts[param.split('=')[0]]=param.split('=')[1]
return dicts if __name__=='__main__':
try:
server = HTTPServer(('203.156.196.254', 20014), MyRequestHandler)
print 'started httpserver...'
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
pass

效果如下:

python下的web服务器模块的更多相关文章

  1. python 启动简单web服务器

    有时我们在开发web静态页面时,需要一个web服务器来测试. 这时可以利用python提供的web服务器来实现. 1.在命令行下进入某个目录 2.在该目录下运行命令: python -m Simple ...

  2. CentOS 6.2下搭建Web服务器

    1Centos 6.2下搭建web服务器 如今,Linux在Web应用越来越广,许多企业都采用Linux来搭建Web服务器,这样即节省了购买正版软件的费用,而且还能够提高服务器的安全性. 之前我们介绍 ...

  3. CentOS 6.3下搭建Web服务器

    准备前的工作: 1.修改selinux配置文件(/etc/sysconfig/selinux) 关闭防火墙 (1)把SELINUX=enforcing注释掉 (2)并添加SELINUX=disable ...

  4. Linux下查看Web服务器当前的并发连接数和TCP连接状态

    对于web服务器(Nginx.Apache等)来说,并发连接数是一个比较重要的参数,下面就通过netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态. $ netstat -n | ...

  5. 外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  6. ubuntu 下配置Web服务器

    ubuntu 下配置Web服务器 1.切换管理员身份 终端/文本界面输入命令: su 根据提示输入密码 注: 如果不能使用su 点击查看如何启用su2.安装MySQL5 apt-get install ...

  7. 在Win10下搭建web服务器,使用本机IP不能访问,但是使用localhos或127.0.0.1可以正常访问的解决办法

    最近在在Win10下搭建web服务器,发现通过windows自带的浏览器win10 edge浏览器使用本机IP不能放问,但是使用localhos或127.0.0.1可以正常访问, 后来无意发现,使用w ...

  8. python网络-动态Web服务器案例(30)

    一.浏览器请求HTML页面的过程 了解了HTTP协议和HTML文档,其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作 ...

  9. 用python快速搭建WEB服务器

    cmd下进入你要搞WEB项目的目录 输入↓方代码 python -m SimpleHTTPServer 端口号# 默认是8000 这样就启动了一个简单的WEB服务器

随机推荐

  1. 面试题之HTML 的 form 提交之前如何验证数值文本框的内容全 部为数字? 否则的话提示用户并终止提交?

    <!DOCTYPE html> <html> <head> <meta charset="{CHARSET}"> <title ...

  2. iOS现有工程 集成 Cordova/Ionic

    首先, 新建 Cordova 项目就不说了, 步骤: http://ionicframework.com/getting-started/ , cordova生成的项目用cdv_project称呼, ...

  3. 64位系统未注册"MSDAORA.1"提供程序

    原因:如错误,64位系统未注册"MSDAORA.1"提供程序 解决:在IIS应用程序池中找到自己的网站,打开高级设置,设置“启用32位应用程序”为“True”即可. 另外还有其他解 ...

  4. 帝国cms数据表详细说明

    表 名 解释 phome_ecms_infoclass_news 新闻采集规则记录表 phome_ecms_infotmp_news 采集临时表 phome_ecms_news 新闻主数据记录表 ph ...

  5. ISO/IEC 14443协议浅谈

    一. 非接触IC卡简介 非接触IC卡又称射频卡,是射频识别技术和IC卡技术有机结合的产物.它解决了无源(卡中无电源)和免接触这一难题,具有更加方便.快捷的特点,广泛用于电子支付.通道控制.公交收费.停 ...

  6. (C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令

    原文(C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:( ...

  7. Android.mk的用法和基础

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

  8. 【Java】【Fulme】Flume-NG源代码阅读之SpoolDirectorySource

    org.apache.flume.source.SpoolDirectorySource是flume的一个经常使用的source,这个源支持从磁盘中某目录获取文件数据.不同于其它异步源,这个源可以避免 ...

  9. Ext.net-00 VS配置

    1.configSections 节点配置 <section name="extnet" type="Ext.Net.GlobalConfig" requ ...

  10. 【转】利用Ajax.BeginForm提交文件

    Ajax.BeginForm @using (Ajax.BeginForm("YourAction", "YourController", new AjaxOp ...