http---返回网页

代码:

 1 import socket
 2 import re
 3 
 4 
 5 def client_msg(new_client):
 6     # 接收客户端请求
 7     recv_data = new_client.recv(1024).decode("utf-8")
 8     # 把读出的数据分行
 9     recv_data_lines = recv_data.splitlines()
10     # 正则匹配GET后面的请求的页面
11     # [^/]表示非“/”字符 +表示至少1个或多个,[^ ]只要不是空格,*表示0个或多个
12     ret = re.match(r"[^/]+(/[^ ]*)",recv_data_lines[0])
13 
14     # ret = re.search(r"/[^ ]*",recv_data_lines[0])  # 查找第一次“/”后面非空格的字符串
15     file_name = ret.group(1)
16     print(file_name)
17     # 打开文件
18     try:
19         f = open("./html" + file_name,"rb")
20     except:
21         # 创建返回数据 HEADER
22         response = "HTTP/1.1 404 NOT FOUND\r\n"
23         response += "\r\n"
24         response += "-----NOT FOUND----"
25         # 发送数据到客户端
26         new_client.send(response.encode("utf-8"))
27     else:
28         # 读出数据
29         html_content = f.read()
30 
31         # 创建返回数据 HEADER
32         response = "HTTP/1.1 200 ok\r\n"
33         response += "\r\n"
34 
35         # 发送数据到客户端
36         new_client.send(response.encode("utf-8"))
37         new_client.send(html_content)
38 
39     # 关闭套接字
40     new_client.close()
41 
42 
43 def main():
44     # 创建套接字
45     tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
46     # 绑定端口
47     tcp_server_socket.bind(("",7890))
48     # 设置监听状态
49     tcp_server_socket.listen(128)
50     # 新建为客户端服务的套接字
51     while True:
52         new_client,client_addr = tcp_server_socket.accept()
53         # 调用服务方法
54         client_msg(new_client)
55     # 关闭套接字
56     tcp_server_socket.close()

猜你喜欢

转载自www.cnblogs.com/yifengs/p/11412036.html
今日推荐