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)
其他变化可自行设置.......
python3与python2使用python原生SimpleHTTPRequestHandler的更多相关文章
- Win10下python3和python2同时安装并解决pip共存问题
特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似. 使用python开发,环境有Python2和 python3 两种,有时候需要两种环境切换使用,下 ...
- 【转】Win10下 python3和python2同时安装并解决pip共存问题
1.下载python3和python2 进入python官网,链接https://www.python.org/ 选择Downloads--->Windows,点击进入就可以看到寻找想要的pyt ...
- 【转】Win10下python3和python2多版本同时安装并解决pip共存问题
[转]Win10下python3和python2多版本同时安装并解决pip共存问题 特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似. 使用pytho ...
- Windows同时安装python3和python2
Windows同时安装python3和python2 https://www.cnblogs.com/shanhua-fu/p/6912683.html Windows7 下python3和pytho ...
- Windows7 下python3和python2同时 安装python3和python2
1.下载python3和python2 进入python官网,链接https://www.python.org/ 选择Downloads--->Windows,点击进入就可以看到寻找想要的pyt ...
- Windows下python3和python2同时安装python2.exe、python3.exe和pip2、pip3设置
1.添加python2到系统环境变量 打开,控制面板\系统和安全\系统,选择高级系统设置,环境变量,选择Path,点击编辑,新建,分别添加D:\Python\python27和D:\Python\py ...
- 从零开始学习PYTHON3讲义(一)认识Python
课程名称 从零开始PYTHON3 课程长度 15讲 适用年龄 15-20岁(初三-大一) 本讲名称 认识Python 时长 90分钟 教学内容分析 Python是时下最流行的计算机编程语言之一.本课程 ...
- 一、Windows10下python3和python2同时安装
python2.exe.python3.exe和pip2.pip3设置 说明:安装安装python3和python2请参考本系列教程(一) 1.添加python2到系统环境变量 打开,控制面板\系统和 ...
- ubuntu python3和python2切换脚本
最近在ubuntu上开发较多,有些工具只能在python2运行,而开发又是在python3上做的开发,所以写个脚本方便在python2和python3之间切换. 切换成python2的文件usepy2 ...
随机推荐
- October 23rd, 2017 Week 43rd Monday
Champions have the courage to keep turning the pages because they know a better chapter lies ahead. ...
- react的新手基础知识笔记
<!DOCTYPE html> <html> <head> <script src="../build/react.js">< ...
- NOIP模拟赛-2018.11.6
NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...
- BZOJ5102:[POI2018]Prawnicy(贪心,堆)
Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<= ...
- MetaMask/eth-block-tracker
https://github.com/MetaMask/eth-block-tracker A JS module for keeping track of the latest Ethereum b ...
- javascript实现拖曳与拖放图片
javascript实现拖曳与拖放图片 其实对于drag和drop拖曳与拖放事件IE很早以前就支持这个操作了,我们先来看看HTML5中新增的拖放API. 在HTML5中想要实现拖放操作,至少要做以下操 ...
- Android 一个相对完整的自动升级功能实现代码
由于项目的需要最近做了一个关于Android自动升级的功能,下面将贴出Android手机客户端的完整代码.这段代码参考别的代码居多,由于不满足需求,所以自己仅仅改了一些需要变动的内容,其他功能都是按照 ...
- array_reduce()使用
这个函数的作用是,把数组中的值循环放到回调函数里处理,结果返回一个单一的值.(applies iteratively the callback function to the elements of ...
- Linux下MySQL安装与操作
sudo apt-get update //用于更新源,获取软件包列表 sudo apt-get upgrade //用于升级指定软件包 install //安装 remove //移除软件包 aut ...
- .NET Core中向已存在文件的特定位置写入数据
本例使用.NET Core向一个文本文件中的特定位置写入数据,来模拟文件上传中的断点续传是如何在服务器端实现的. 新建一个.NET Core控制台项目FileContinueToWrite,其Prog ...