一、创建Server
1.Dos 命令
python -m BaseHTTPServer [port]
默认端口是8000,
2.Python 脚本启动
#coding:utf-8
'''
Created on 2018��10��29��
@author: Administrator
'''
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import MySQLdb
from sqlalchemy import create_engine
import pandas as pd
import json
def handleReq(path):
print path
#http://127.0.0.1:8000/itype=90&market=0&code=000001&startNum=0&size=100&shtTQ=1&ptype=0
#解析URL带的请求参数
reqParam = {}
allReq = path.split('/')
if len(allReq) > 1:
req = allReq[1].split('&')
for strParam in req:
param = strParam.split('=')
if len(param) > 1:
reqParam[param[0]] = param[1]
gpcode = ""
if reqParam.has_key("market"):
strMarket = ""
if reqParam["market"] == '0':
strMarket = "SZ"
elif reqParam["market"] == '1':
strMarket = "SH"
if reqParam.has_key("code"):
strCode = reqParam["code"]
if len(strMarket) > 0:
gpcode = strMarket + strCode
conn = create_engine("mysql://root:123456@172.16.8.110/quant?charset=utf8")
sql = "select * from quant_stk_calc_d_fct_kdj where gscode = 'FCT_KDJ' and gpcode = '{0}' order by ymd desc limit {1},{2}".format(gpcode, reqParam["startNum"], reqParam["size"])
dfR = pd.read_sql(sql,conn)
datas = []
for i in range(0,len(dfR["ymd"])):
date = int(dfR["ymd"][i])
print type(date)
k = round(dfR["f1"][i], 4)
d = round(dfR["f2"][i], 4)
j = round(dfR["f3"][i], 4)
dictData = {"iDate":date,"mField":{"K":k, "D":d, "J":j}}
datas.append(dictData)
return datas
class HTTPHandle(BaseHTTPRequestHandler):
def do_GET(self):
if self.path != "/favicon.ico":
print "path:",self.path
datas = handleReq(self.path) #处理URL请求参数,根据参数获取相应数据
jsonStr = json.dumps(datas)
print jsonStr
self.protocol_version = "HTTP/1.1"
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
self.wfile.write(jsonStr)
def startServer():
httpServer = HTTPServer(("127.0.0.1", 8000), HTTPHandle)
httpServer.serve_forever()
if __name__ == '__main__':
startServer()
二、浏览器访问
服务开启后,在浏览器输入网址访问服务器资源
http://127.0.0.1:8000/itype=90&market=0&code=000001&startNum=0&size=100&shtTQ=1&ptype=0
效果:
BaseHTTPServer模块说明,参见:http://blog.sina.com.cn/s/blog_9e9f16d10102x7fc.html
报错:json 报错'xxx is not JSON serializable'的处理方法,参见:https://www.cnblogs.com/SZxiaochun/p/9875050.html