zoukankan      html  css  js  c++  java
  • 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('
    Start server success ... 
    server_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('
    Start server success ... 
    server_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) 

    其他变化可自行设置.......

  • 相关阅读:
    vue学习笔记(四)---- 品牌管理案例
    vue学习笔记(三)---- vue-resource
    vue学习笔记(二) ---- vue实例的生命周期
    vue学习笔记(一) ---- vue指令(总体大纲)
    vue学习笔记(一)---- vue指令(在vue中使用样式的方式)
    【问题记录】—.NetCore 编译问题
    Docker学习—概念及基本应用
    Consul 学习笔记-服务注册
    认证授权:IdentityServer4
    认证授权:IdentityServer4
  • 原文地址:https://www.cnblogs.com/xjh713/p/10021919.html
Copyright © 2011-2022 走看看