python3 简单实现 web 静态服务器
来源:互联网 发布:苹果电脑图片编辑软件 编辑:程序博客网 时间:2024/05/22 05:01
from gevent import monkeymonkey.patch_all()import reimport geventfrom socket import *class HttpServer(object): """HTTP服务器类""" def __init__(self): # 创建一个TCP的监听套接字 ,接受客户端的连接请求 self.server_sock = socket(AF_INET, SOCK_STREAM) # 地址重设 , 在重启的时候能立即释放端口, 1 表示设置 0 表示取消设置 self.server_sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) # 绑定端口 self.server_sock.bind(('', 7724)) # 将主动套接字转变为被动套接字 self.server_sock.listen(128) def start(self): # 循环接受客户端请求 while True: client_sock, client_adr = self.server_sock.accept() print("收到来自%s的请求" % str(client_adr)) # 创建并启动协程 # 破解patch_all ----> recv,recvfrom,accept 如果没有数据 就能够自动被gevent自动切换 gevent.spawn(self.handle_client, client_sock) def handle_client(self, client_socket): # 接受客户端的HTTP报文 ---数据 rec_data = client_socket.recv(4096).decode() # 判断如果接受的数据为空, 即客户端断开连接 if not rec_data: client_socket.close() print("客户端断开了连接") return # 拆分出请求报文的每一行 返回一个列表 data_list = rec_data.splitlines() # 解析用户的请求路径 ,获取请求行数据 第0行 request_line = re.match(r"\w+\s+(\S+)", data_list[0]) # 如果输入的地址有误 ,断开连接 if not request_line: # 表明请求的格式不合法 client_socket.close() print("输入的地址有误") return # 格式合法 根据正则提取出用户请求的路径信息 path_info = request_line.group(1) # 当用户访问"/"时 ,自动跳转到 "/index.html" if path_info == "/": # index.html 一般代表一个网站的首页 path_info = "/index.html" try: # 以二进制方式打开文件,文件的目录=服务器指定的目录+用户请求的目录, 读取的文件类型是bytes类型 with open("static" + path_info, "rb") as file: file_content = file.read() except Exception as e: # 如果用户请求的路径不存在 则会抛出404 不存在 错误 response_data = "HTTP/1.1 404 NOT FOUND\r\n" # 头部数据 response_data += "server: Python Server Hyper1.0\r\n" # 空行 response_data += "\r\n" # 响应体数据 根据响应报文的格式 拼接相关数据 response_data += "404NOTFOUND" * 1000 # 将响应体数据编码发送 client_socket.send(response_data.encode()) else: # 打开文件成功 文件数据就是响应体数据 response_data = "HTTP/1.1 200 OK\r\n" response_data += "server: Python Server Hyper1.0\r\n" response_data += "\r\n" # 如果响应的文件数据是图片,音频, 视频的等二进制资源 ,则不能进行decode操作 response_body = response_data.encode() + file_content # send函数返回值的含义是表示成功发送的字节数,如果想要全部发送, 可以使用sendall client_socket.send(response_body) finally: # 不管有无发生异常,都会执行套接字关闭 client_socket.close()def main(): # 创建一个HttpServer的实例对象 http_server = HttpServer() # 开始启动http_server http_server.start()if __name__ == '__main__': main()
阅读全文
0 0
- python3 简单实现 web 静态服务器
- 一个简单的静态web服务器实现
- C#实现简单WEB服务器
- C#实现简单WEB服务器
- 简单的web服务器实现
- c#实现简单Web服务器
- 实现简单的web服务器
- 实现简单的Web服务器
- Python 实现简单 Web 服务器
- 简单的web服务器实现
- python3 学习-1(实现简单的服务器与客户端)
- python3实现TCP协议的简单服务器和客户端
- python3实现UDP协议的简单服务器和客户端
- python3实现UDP协议的简单服务器和客户端
- python3实现TCP协议的简单服务器和客户端
- NodeJs实现简单的静态web项目
- python3自带web服务器
- 利用nginx搭建简单的web静态服务器
- Js结合struts回显select代码示例
- Webpck&React,redux学习
- HDU 4427 Math Magic (优化DP,ICPC2012长春)
- Anaconda "failed to start because it could not find or load the Qt platform plugin"
- vijos1094(差分约束系统)
- python3 简单实现 web 静态服务器
- 删除shared包
- Tomcat 7 快速入门及应用
- Python中多线程和单线程端口扫描对比
- Ubuntu Linux 空間釋放
- 机器学习1-定义
- [LeetCode-Algorithms-49] "Group Anagrams" (2017.11.21-WEEK12)
- hibernate-SessionFactory详解
- 从零开始搭建Hadoop2.7.1的分布式集群