python实现简单的http服务器_Python实现简单HTTP服务器(二)

该博客介绍了一个使用Python实现的简单HTTP服务器,它能够处理客户端的连接并解析HTTP请求。通过创建socket,监听端口,以及使用多进程处理客户端请求,服务器能解析请求头、提取文件名和请求方法,并向客户端发送响应。代码中还包含了一个启动服务器和绑定端口的方法。
摘要由CSDN通过智能技术生成

#coding:utf-8

importsocketimportreimportsysfrom multiprocessing importProcessclassHTTPServer(object):def __init__(self, application):"""application:指的是框架的app"""self.server_socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)

self.app=applicationdefstart(self):

self.server_socket.listen(128)whileTrue:

client_socket, client_address=self.server_socket.accept()print("[%s, %s]用户连接上了" %client_address)

handle_client_process= Process(target=self.handle_client, args=(client_socket,))

handle_client_process.start()

client_socket.close()defstart_response(self, status, headers):

response_headers= "HTTP/1.1" + status + "\r\n"

for header inheaders:

response_headers+= "%s: %s\r\n" %header

self.response_headers=response_headersdefhandle_client(self, client_socket):"""处理客户端请求"""

#获取客户端请求数据

request_data = client_socket.recv(1024)print("request data:", request_data)

request_lines=request_data.splitlines()for line inrequest_lines:print(line)#解析请求报文

request_start_line =request_lines[0]#提取用户请求的文件名及请求方法

file_name = re.match(r"\w+ +(/[^ ]*)", request_start_line.decode("utf-8")).group(1)

method= re.match(r"(\w+) +/[^ ]*", request_start_line.decode("utf-8")).group(1)

env={"PATH_INFO": file_name,"METHOD": method

}

response_body=self.app(env, self.start_response)

response= self.response_headers + "\r\n" +response_body#向客户端返回响应数据

client_socket.send(bytes(response, "utf-8"))#关闭客户端连接

client_socket.close()defbind(self, port):

self.server_socket.bind(("", port))defmain():if len(sys.argv) < 2:

sys.exit("python MyWebServer.py Module:app")

module_name, app_name= sys.argv[1].split(":")#module_name = "MyWebFrameWork"

#app_name = "app"

m = __import__(module_name)

app=getattr(m, app_name)

http_server=HTTPServer(app)

http_server.bind(8000)

http_server.start()if __name__ == "__main__":

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值