今天小编给大家分享一下python静态web服务器如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
1、编写TCP服务器程序。
2、获取浏览器发送的http请求消息数据。
3、读取固定的页面数据,将页面数据组装成HTTP响应消息数据并发送给浏览器。
4、HTTP响应报文数据发送完成后,关闭服务于客户端的套接字。
实例
# 时间: 2021/10/21 20:38 import socket if __name__ == '__main__': # 创建tcp服务端套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置端口号复用, 程序退出端口立即释放 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 绑定端口号 tcp_server_socket.bind(("", 8080)) # 设置监听 tcp_server_socket.listen(128) while True: # 等待接受客户端的连接请求 new_socket, ip_port = tcp_server_socket.accept() # 代码执行到此,说明连接建立成功 recv_client_data = new_socket.recv(4096) # 对二进制数据进行解码 recv_client_content = recv_client_data.decode) print(recv_client_content) # 响应行 response_line = "HTTP/1.1 200 OK\r\n" # 响应头 response_header = "Server: py1.0\r\n" # 响应体 response_body = "Hello,guys!" # 拼接响应报文 response_data = (response_line + response_header + "\r\n"+ response_body).encode() # 发送数据 new_socket.send(response_data) # 关闭服务与客户端的套接字 new_socket.close()
实例扩展:
import socket import re import time def service_client(new_socket): """为这个客户端服务""" # 1.接收浏览器发送过来的请求,即http请求 # GET / HTTP/1.1 # -------- request = new_socket.recv(1024).decode('utf-8') # 判断客户端意外断开链接返回空字符串 if not request: # 关闭套接字并退出 new_socket.close() print("==="*30) return # 分隔套接字 request_lines = request.splitlines() print() print(">"*20) print(request_lines) file_name = "" ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0]) if ret: file_name = ret.group(1) if file_name == "/": file_name = "/index.html" # 2.返回http格式数据 给浏览器 try: f = open("./html" + file_name, "rb") except: response = "HTTP/1.1 404 NOT FOUND\r\n" response += "Content-Type:text/html;charset=utf-8\r\n" response += "\r\n" response += "<h2>404 not found <br> 没有发现所请求资源</h2>" response += str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))) new_socket.send(response.encode('utf-8')) else: html_content = f.read() f.close() # 2.1准备发送给浏览器的数据---header response = "HTTP/1.1 200 OK\r\n" response += "\r\n" # 2.2准备发送给浏览器的数据 ---body # 将response header发送给浏览器 new_socket.send(response.encode("utf-8")) # 将response body发送给浏览器 new_socket.send(html_content) # 关闭套接字 new_socket.close() def main(): """用来完成整体的控制""" # 1.创建套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 端口复用 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 2.绑定 tcp_server_socket.bind(("", 7890)) # 3.变为套接字 tcp_server_socket.listen(128) while True: # 4.等待客户端的链接 new_socket, client_addr = tcp_server_socket.accept() print(client_addr) # 5.为这个客户端服务 service_client(new_socket) # 关闭监听套接字 tcp_server_socket.close() if __name__ == '__main__': main()
以上就是“python静态web服务器如何实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。