今天有需求做一个简单的http服务, 根据url 返回数据库查询结果即可
10.20.9.25:8123/validate?name=asd&passwd=123456 验证用户
10.20.9.25:8123/register?name=asd&passwd=123456 添加用户
启动服务 python httpserverdemo.py 8123 不输入参数默认为8000
10.20.9.25:8123/validate?name=sunlei&passwd=123456
10.20.9.25:8123/register?name=sunlei&passwd=123456
如果部署在新的环境下,运行 python createdb.py 建立数据库
httpserverdemo.py文件
#encoding=utf-8
'''
'''
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import io,shutil
import urllib,time
import getopt,string
import sys
import sqlite3
from sql import sqloption
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:#post方法,接收post参数
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)
print query[0]
print query[1]
action = query[0]
if query[1]:#接收get参数
queryParams = {}
for qp in query[1].split('&'):
kv = qp.split('=')
queryParams[kv[0]] = urllib.unquote(kv[1]).decode("utf-8", 'ignore')
print queryParams
if action == '/register':
print 'register get '
a=sqloption()
if queryParams['name'] and queryParams['passwd']:
if a.sqlinsert(queryParams['name'],queryParams['passwd'])==True:
content ='1'
else:
content ='0'
else:
content ='0'
a.close()
elif action == '/validate':
print 'validate get'
a=sqloption()
if queryParams['name'] and queryParams['passwd']:
if a.sqlselect(queryParams['name'],queryParams['passwd'])==True:
content ='1'
else:
content ='0' #validate false
else:
content='0'#chanshu buzhengque
a.close()
#指定返回编码
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__':
#python httpserverdemo.py 8123
if len(sys.argv)>1:
serverport=int(sys.argv[1])
else:
serverport=8000
print serverport
try:
server = HTTPServer(('', serverport), MyRequestHandler)
print 'started httpserver...'
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
pass
sql.py文件 #encoding=utf-8
import sqlite3
sqlpath="E:\\test.db"
#
class sqloption:
def __init__(self):
self.conn=sqlite3.connect(sqlpath)
self.cu = self.conn.cursor()
def create(self):
cu=self.cu
cu.execute(("""create table user ( name varchar(50) primary key, passwd varchar(50) UNIQUE )"""))
def sqlinsert(self,name,passwd):
if self.sqlexist(name)!=False:
print 'user is exist'
return False
else:
t=(name,passwd)
self.cu.execute("insert into user values(?,?)",t)
self.conn.commit()
print '%s insert ' %name
return True
def sqlexist(self,name):
t=(name,)
self.cu.execute("select * from user where name =?",t)
a=self.cu.fetchone()
if a :
return a
else:
print "user name %s not exist" % name
return False
def sqlselect(self,name,passwd):
a=self.sqlexist(name)
if a:
if a[1]==passwd:
print '校验成功,密码正确'
return True
else:
print '密码不正确'
return False
def close(self):
self.conn.close()
最后是创建数据库的文件 create.py
from sql import sqloption
a=sqloption()
a.create()
a.close()