python mini_server模仿服务器

该博客展示了使用Python实现简易WSGI服务器的代码。通过socket、re、multiprocessing等模块,定义了WSGIServer类,包含初始化、处理请求、运行服务器等方法。根据请求文件类型处理响应,若为.html文件调用动态模块,其他文件则尝试读取并返回,若文件不存在返回404错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import socket
import re
import multiprocessing
import time
import dynamic.wsgi01


class WSGIServer(object):
    def __init__(self,static):
    
        self.static = static

        self.socket_tcp=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.socket_tcp.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        self.socket_tcp.bind(('',8080))
        self.socket_tcp.listen(128)

    def hand_body(self,status,headers):
        self.status=status
        self.headers=[('server','mini_wed')]
        self.headers+=headers

    def wed_ss(self,new_socket):
        recv_data=new_socket.recv(1024).decode('utf-8')
        ret = re.match(r'[^/]*/([^ ]*)\sHTTP',recv_data)
        data = ret.group(1)
             
        if data.endswith('.html') or data=='':
            if data=="":
                data='index.html'
            env=dict()
            env['PATH_INFO']=data
            content=dynamic.wsgi01.application(env,self.hand_body)

            a='HTTP/1.1 %s  \r\n'%self.status

            for temp in self.headers:
                a+='%s:%s\r\n'%(temp[0],temp[1])
            a+="\r\n"
            response=a+content
            new_socket.send(response.encode('utf-8'))
        else:            
            try:
                file = open("%s/%s"%(self.static,data),"rb")
            except:
                a='HTTP/1.1 404 NOTFOUND\r\n'
                a+='Content-Type: text/html; charset=utf-8\r\n'
                a+='\r\n'
                a+='找不到网页'
                new_socket.send(a.encode('utf-8'))
            else:
                content=file.read()
                file.close()

                a='HTTP/1.1 200 OK\r\n'
                a+='Content-Tybe:text/html;charset=utf-8\r\n'
                a+='\r\n'
                new_socket.send(a.encode('utf-8'))
                new_socket.send(content)

    def run_server(self):
        while True:
            print('--1--')
            new_socket,new_tcp=self.socket_tcp.accept()
            p = multiprocessing.Process(target=self.wed_ss,args=(new_socket,))
            p.start()
            new_socket.close()
        self.socket_tcp.close()

def main():
    
     #插入字典,留配置的文件
    with open('./str.txt')as f:
        content=f.read()
    d=eval(content)
    static=d['static_path']
    # dynamic=d['dynamic_path']
    # print(dynamic)
    
    server=WSGIServer(static)
    server.run_server()

if __name__ == '__main__':
        main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值