分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

手写走通HTTP server

发布时间:2023-09-06 02:15责任编辑:董明明关键词:暂无标签

HTTP server 2.0

  1 接收客户请求

  2 解析客户端请求

  3 组合数据,形成HTTP response

  4 将数据发送给客户端

升级 :

  1 多线程接收客户端请求

  2 基本的请求解析,根据请求返回数据(相应内容)

  3 除了可以请求静态网页,也可以请求简单的数据

  4 将功能封装在一个类中

#coding = utf-8‘‘‘http 2.01多线程并发2可以请求简单数据3能进行简单请求解析4结构使用类进行封装‘‘‘import socket, os, sys, tracebackfrom threading import Thread#封装具体的服务器功能class HTTPserver(object): ???def __init__(self,server_addr,server_static_dir): ???????????self.server_addr = server_addr ???????????self.server_static_dir = server_static_dir ???????????self.ip = server_addr[0] ???????????self.port = server_addr[1] ???????????self.create_socket() ???def create_socket(self):#创建 ???????self.sockfd = socket.socket() ???????self.sockfd.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ???????self.sockfd.bind(self.server_addr) ???def serve_forever(self):#启动 ???????self.sockfd.listen() ???????print(‘listen the prot:%s‘ % self.port) ???????while True: ???????????try: ???????????????confd, addr = self.sockfd.accept() ???????????except KeyboardInterrupt: ???????????????self.sockfd.close() ???????????????sys.exit(‘服务器退出‘) ???????????except Exception: ???????????????traceback.print_exc() ???????????????continue ???????????# 创建新的线程处理请求 ???????????t = Thread(target=self.handle, args=(confd,)) ???????????t.Daemon = True ???????????t.start() ???def handle(self, confd): ???????# 接收客户端请求 ???????data = confd.recv(1024) ???????# 解析请求内容 ???????dataHeader = data.splitlines() ???????# 获取具体请求内容 ???????getRequest = str(dataHeader[0]).split(‘ ‘)[1] ???????urls = [‘/‘,‘/index‘,‘/index_1‘,‘/index_2‘] ???????if getRequest == ‘/‘ or getRequest[-5:] == ‘.html‘:#获取主页 ???????????print(‘已进行来‘) ???????????self.get_html(confd) ???????elif getRequest in urls: ?#获取下级页面 ???????????self.get_data(confd,getRequest) ???????else: ???????????self.error_(confd) ???????confd.close() ???def get_data(self, confd,getReques):#获取页面数据 ???????getReques = getReques.split(‘/‘)[1] ???????path =os.path.join(self.server_static_dir,getReques) ???????print(path) ???????with open(path+‘.html‘,‘r‘) as f: ???????????data = f.read() ???????response = ‘HTTP/1.1 200 OK\r\n‘ ???????response +=‘\r\n‘ ???????response +=data ???????confd.send(response.encode()) ???def error_(self,confd):#出错处理 ???????response = ‘HTTP/1.1 404 NOT FUOUND\r\n‘ ???????response += ‘\r\n‘ ???????responseBOdy = ‘SORRY,NOT PAGE‘ ???????response += responseBOdy ???????confd.send(responseBOdy.encode()) ???def get_html(self,confd):#首页处理 ???????with open(‘index.html‘,‘r‘) as f: ???????????data = f.read() ???????#print(data) ???????xieyi = ‘HTTP/1.1 200 OK \r\n‘ ???????xieyi += ‘\r\n‘ ???????xieyi += data ???????confd.send(xieyi.encode())if __name__ == ‘__main__‘: ???server_addr = (‘127.0.0.1‘, 8080)#地址 ???server_static_dir = os.getcwd()#静态页面目录 ???#生成对象 ???httpd = HTTPserver(server_addr, server_static_dir) ???#启动服务器 ???httpd.serve_forever()

手写走通HTTP server

原文地址:https://www.cnblogs.com/Skyda/p/9662847.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved