Python之web服务器-返回404页面数据(四)
# 导入模块
import socket
import re
if __name__ = '__main__':
# 1.创建tcp服务端套接字
tcp_server_socket = socket.socket(socket.AF_INET , socket.SOKE_STREAM)
# .设置端口号复用
tcp_server_socket.
# 2. 绑定端口号
tcp_server_socket.bind(("", 9090))
# 3. 设置监听
tcp_erver_socket.listen(128)
while True:
# 4.等待客户端的连接请求,并获取新的套接字和客户端的IP
service_client_socket, ip_port = tcp_server_socket.accept()
# 5.获取客户端发送的http请求报文数据
http_request_data = service_client_socket.recv(4096)
# 6.对二进制数据进行解码
http_request_content = http_request_data.dacode("utf-8")
print("http_request_content")
# 7.正则匹配解码后客户端的请求报文
match_obj = re.search("/\S*", http_request_content)
if match_obj:
# 7.1 匹配成功, 获取请求的资源连接
request_path = match_obj.group()
# 7.2 判断请求的路径是否是根路径,如果是根路径指定对应的文件
if request_path == "/":
try:
# 7.3 打开文件读取文件数据
with open("static" + request_path , "rb") as file:
# 7.4 读取文件中的全部数据
file_data = file.read()
except Exception as e:
# [8] 404 没有在服务器找到请求的文件
# [8.1.1] 响应行
response_line = "HTTP/1.1 404 Not Found\r\n"
# [8.1.2] 响应头, 提示: 响应头信息程序员也可以根据自己的需要自定义一个响应头
response_header = "Server:PWS/1.1\r\nother:ok\r\nContent-Type:text/html;charset=utf-8\r\n"
# [8.1.3] 响应体
response_body = "非常抱歉,您当前访问的网页已经不存在了
"
# [8.1.4] 组装http响应报文数据
response_data = (response_line + response_header + "\r\n" + response_body).encode("utf-8")
# [8.1] 发送http响应报文数据个客户端
service_client_socket.send(response_data)
else:
# [8] 找到了响应请求的资源文件, 发送200的状态
# [8.1.1] 响应行
response_line = "HTTP/1.1 200 OK\r\n"
# [8.1.2] 响应头 提示: 响应头信息程序员也可以根据自己的需要自定义一个响应头信息
# 注意: Content-Type: text/html;charset=utf-8: 服务器告诉浏览器数据的类型及编码格式
response_header = "Server:PWS/1.1\r\npther:ok\r\nContent-Type:text/html;charset=utf-8\r\n"
# [8.1.3] 响应体
response_body = file_data
# [8.1.4] 组装http响应报文数据
response_data = (respose_line + respose_header + \r\n +).encode("utf-8") + response_body
# [8.1] 发送http响应报文数据给客户端
service_client_socket.send(respose_data)
# 关闭套接字
service_client_socket.close()