python下的web服务器模块
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服务器模块的更多相关文章
- python 启动简单web服务器
有时我们在开发web静态页面时,需要一个web服务器来测试. 这时可以利用python提供的web服务器来实现. 1.在命令行下进入某个目录 2.在该目录下运行命令: python -m Simple ...
- CentOS 6.2下搭建Web服务器
1Centos 6.2下搭建web服务器 如今,Linux在Web应用越来越广,许多企业都采用Linux来搭建Web服务器,这样即节省了购买正版软件的费用,而且还能够提高服务器的安全性. 之前我们介绍 ...
- CentOS 6.3下搭建Web服务器
准备前的工作: 1.修改selinux配置文件(/etc/sysconfig/selinux) 关闭防火墙 (1)把SELINUX=enforcing注释掉 (2)并添加SELINUX=disable ...
- Linux下查看Web服务器当前的并发连接数和TCP连接状态
对于web服务器(Nginx.Apache等)来说,并发连接数是一个比较重要的参数,下面就通过netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态. $ netstat -n | ...
- 外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- ubuntu 下配置Web服务器
ubuntu 下配置Web服务器 1.切换管理员身份 终端/文本界面输入命令: su 根据提示输入密码 注: 如果不能使用su 点击查看如何启用su2.安装MySQL5 apt-get install ...
- 在Win10下搭建web服务器,使用本机IP不能访问,但是使用localhos或127.0.0.1可以正常访问的解决办法
最近在在Win10下搭建web服务器,发现通过windows自带的浏览器win10 edge浏览器使用本机IP不能放问,但是使用localhos或127.0.0.1可以正常访问, 后来无意发现,使用w ...
- python网络-动态Web服务器案例(30)
一.浏览器请求HTML页面的过程 了解了HTTP协议和HTML文档,其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作 ...
- 用python快速搭建WEB服务器
cmd下进入你要搞WEB项目的目录 输入↓方代码 python -m SimpleHTTPServer 端口号# 默认是8000 这样就启动了一个简单的WEB服务器
随机推荐
- 设置cell背景色半透明
cell.backgroundColor = [UIColor colorWithRed:(247.0/255.0) green:(151.0/255.0) blue:(121.0/255.0) al ...
- News feed
1. Level 1.0 Database Schema: a. User UserID Name Age 1 Jason 25 2 Michael 26 b. Friendship Friendsh ...
- BZOJ 2173: 整数的lqp拆分( dp )
靠着暴力+直觉搞出递推式 f(n) = ∑F(i)f(n-i) (1≤i≤n) (直接想大概也不会很复杂吧...). f(0)=0 感受一下这个递推式...因为和斐波那契有关..我们算一下f(n)+f ...
- codeforces 400E. Inna and Binary Logic 线段树
题目链接 给出n个数, 定义a[1][i]为这初始的n个数, 然后a[i][j] = a[i-1][j]&a[i-1][j-1], 这样就可以得到一个三角形一共n*(n-1)/2个数. 给出一 ...
- React使用笔记2-React Components的生命周期
Date: 2015-11-27 21:23 Category: Web Tags: JavaScript Author: 刘理想 [toc] 1. React Components的生命周期 Rea ...
- nrf51 官方PWM库
地址:https://github.com/NordicSemiconductor/nrf51-pwm-library nrf_pwm_init函数 初始化PWM参数 设置输出pwm的gpio pin ...
- java ajax初始化
<script type="text/javascript"> var http_request = false; function createXMLHt ...
- Delphi的MDI编程中遇到的一个奇怪问题(值得研究的一个问题)
近日在用delphi写一个多文档应用程序,除了一个主界面是自动生成的,其他功能页面全部都是通过Application.CreateForm()动态生成的,也就是说在ProjectManager中点击程 ...
- jQuery 自学笔记—3
jQuery 语法实例 $(this).hide() 演示 jQuery hide() 函数,隐藏当前的 HTML 元素. $("#test").hide() 演示 jQuery ...
- poj 2375 Cow Ski Area bfs
这个题目用tarjan找联通块,缩点,然后统计出入度为0的点理论上是可行的,但问题是会暴栈.考虑到这个题目的特殊性,可以直接用一次bfs找到数字相同且联通的块,这就是一个联通块,然后缩点,统计出入度即 ...