python3与python2使用python原生SimpleHTTPRequestHandler
python3 使用时如下:
#!/usr/bin/env python3 #coding=utf-8 from http.server import SimpleHTTPRequestHandler import socketserver import os,io,shutil import logging import cgi import sys import json log_path = './logs/run_server_logs.log' logging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S',filename=log_path) class MyHttpHandler(SimpleHTTPRequestHandler): def _set_headers(self): self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() def send_datas(self,contents): #指定返回编码 enc = "UTF-8" content = contents.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(contents))) self.end_headers() shutil.copyfileobj(f,self.wfile) def do_GET(self): logging.info("got get request "+str(self.path)) values = str(self.path) self.send_datas('这是get请求'+values) def do_POST(self): logging.info("got post!!") datasets = cgi.FieldStorage(fp = self.rfile,headers = self.headers,environ = {'REQUEST_METHOD': 'POST'}) logging.info(str(datasets)) id = datasets.getvalue('id') name = datasets.getvalue('name') msg = "name=="+str(name)+" id=="+str(id) flag = 1 results = {"status":flag,"msg":msg} self.send_datas(json.dumps(results)) def start_server(): server_host = '127.0.0.1' server_port = 8080 httpd = socketserver.TCPServer((server_host,server_port), MyHttpHandler) logging.info('\nStart server success ... \nserver_host:'+server_host+' server_port:'+str(server_port)) print('exe_server started on '+str(server_host)+' server_port:'+str(server_port)) httpd.serve_forever() if __name__ == "__main__": start_server()
python2使用时:
#!/usr/bin/env python #coding=utf-8 from SimpleHTTPServer import SimpleHTTPRequestHandler import SocketServer import os,io,shutil import logging import cgi import urlparse import sys reload(sys) sys.setdefaultencoding('utf-8') log_path = './logs/run_server_logs.log' logging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S',filename=log_path) class MyHttpHandler(SimpleHTTPRequestHandler): def _set_headers(self): self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() def send_datas(self,contents): #指定返回编码 enc = "UTF-8" #contents = contents.encode(enc) f = io.BytesIO() f.write(contents) f.seek(0) self.send_response(200) self.send_header("Content-type", "text/html; charset=%s" % enc) self.send_header("Content-Length", str(len(contents))) self.end_headers() shutil.copyfileobj(f,self.wfile) def do_GET(self): logging.info("got get request "+str(self.path)) values = str(self.path) self.send_datas('get请求方式'+values) def do_POST(self): logging.info("got post!!") datasets = cgi.FieldStorage(fp = self.rfile,headers = self.headers,environ = {'REQUEST_METHOD': 'POST'}) logging.info(str(datasets)) id = datasets.getvalue('id') name = datasets.getvalue('name') msg = "name=="+str(name)+" id=="+str(id) flag = 1 results = {'status':flag,'msg':msg} self.send_datas(str(results)) def start_server(): server_host = '127.0.0.1' server_port = 8080 httpd = SocketServer.TCPServer((server_host,server_port), MyHttpHandler) logging.info('\nStart server success ... \nserver_host:'+server_host+' server_port:'+str(server_port)) print('exe_server started on '+str(server_host)+' server_port:'+str(server_port)) httpd.serve_forever() if __name__ == "__main__": start_server()
python3与python2中SimpleHTTPRequestHandler导入方式不同,3是 from http.server import SimpleHTTPRequestHandler , 2是 from SimpleHTTPServer import SimpleHTTPRequestHandler ;
另外serversocket也不一样3是 import socketserver httpd = socketserver.TCPServer((server_host,server_port), MyHttpHandler) ,2是 import SocketServer httpd = SocketServer.TCPServer((server_host,server_port), MyHttpHandler)
其他变化可自行设置.......