1 import socket
 2 import re
 3 
 4 
 5 def main():
 6     # 1. 创建socket
 7     http_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 8 
 9     # 2. 绑定地址
10     http_server_socket.bind((\'\', 7890))
11 
12     # 3. 监听
13     http_server_socket.listen(128)
14 
15     while True:
16         # 4. 等待客户端连接accept
17         new_http_socket, client_address = http_server_socket.accept()
18 
19         # 5. 接收浏览器发送过来的请求
20         request = new_http_socket.recv(1024)
21 
22         # 如果request为空,说明客户端关闭socket
23         if request:
24             request = str(request, \'utf8\')
25 
26             # 请求头请求体按行拆分
27             request_first_line = request.split(\'\r\n\')[0]
28 
29             # \'GET /index.html HTTP/1.1\'
30             # 从请求头里解析出url地址/index.html
31             request_file_name = re.findall(r\'/[^ ]*\', request_first_line)
32             print(\'接到的请求\',request)
33             print(\'寻找请求头里的url\',request_file_name)
34             request_file_name = request_file_name[0]
35             print(\'客户端请求文件地址:\', request_file_name)
36 
37             # 如果ip后面没有url
38             if request_file_name == \'/\':
39                 request_file_name = \'/index.html\'
40 
41 
42             # 在服务器寻找浏览器请求的文件
43             # 6. 返回http格式数据
44 
45             try:
46                 f = open(\'.\'+request_file_name,\'r\')
47             except Exception:
48                 response_header = "HTTP/1.1 404 NOT FOUND\r\n" #\r\n是为了兼容windows的换行
49                 response_empty_line = "\r\n" #加一个空行
50                 response_body = \'File not found\'
51             else:
52 
53                 response_header = "HTTP/1.1 200 OK\r\n" #\r\n是为了兼容windows的换行
54                 response_empty_line = "\r\n" #加一个空行
55                 response_body = f.read()
56                 print(response_body)
57                 print(type(response_body))
58                 f.close()
59 
60             # 拼接响应信息:响应头+空行+响应体
61             response = \'\'.join([response_header,response_empty_line,response_body])
62             response = bytes(response, \'utf8\')
63 
64             new_http_socket.send(response)
65 
66         # 7. 关闭
67         else:
68             new_http_socket.close()
69             print(\'服务结束\')
70 
71 
72 if __name__ == "__main__":
73     main()

在浏览器输入http://127.0.0.1:7890/index.html即可看到index页面

转自https://blog.csdn.net/weixin_38892128/article/details/103113589  感谢

版权声明:本文为fei2232原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/fei2232/p/13037364.html