python 关于从cmd打开.py 浏览器页面显示数据(封装)

import socket
import gevent
import sys
from gevent import monkey
import re

monkey.patch_all()
class HTTP_server(object):
    def __init__(self,port):
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        self.server_socket.bind(("", port))
        self.server_socket.listen(128)
    def run(self):
        while True:
            new_socket, addr = self.server_socket.accept()
            gevent.spawn(self.handle_req, new_socket)
    def handle_req(self,new_socket):
        recv_data = new_socket.recv(4096)
        if not recv_data:
            print("客户端下线了哦...")
            new_socket.close()
            return
        recv_data = recv_data.decode()
        data_list = recv_data.splitlines()
        req_line = data_list[0]
        ret = re.match(r".* (.*) .*", req_line)
        file_path = ret.group(1)
        print("******路径:%s******" % file_path)
        if file_path == "/":
            file_path = "/index.html"
        try:
            file = open("./static" + file_path, "rb")
        except Exception as e:
            resp_line = "HTTP/1.1 404 Not Found\r\n"
            resp_headers = "Server: HMWS/6.6\r\n"
            resp_headers += "Content-Type: text/html; charset=utf-8\r\n"
            resp_headers += "Connection: keep-alive\r\n"
            resp_headers += "\r\n"
            resp_body = "<h1>哎呦,出错了哦...404 %s</h1>" % str(e)
            resp_body = resp_body.encode()
        else:
            resp_line = "HTTP/1.1 200 OK\r\n"
            resp_headers = "Server: HMWS/6.6\r\n"
            resp_headers += "Content-Type: text/html;charset=utf-8\r\n"
            resp_headers += "Connection: keep-alive\r\n"
            resp_headers += "\r\n"
            resp_body = file.read()
            file.close()
        finally:
            print("finally内的代码一定会执行...")
            resp = resp_line + resp_headers
            new_socket.send(resp.encode() + resp_body)
            new_socket.close()
def main():
        print(sys.argv)
        if len(sys.argv) != 2:
            print("请输入正确的启动命令: python3 web_server.py 8888")
            return
        port_str = sys.argv[1]
        if not port_str.isdigit():
            print("请输入合法的端口号!!!, 正确姿势为: python3 web_server.py 8888")
            return
        port = int(port_str)
        http_server = HTTP_server(port)
        http_server.run()
if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/ch_zhenhua/article/details/80413917