Python搭建返回指定页面不存在显示404的静态web服务器
== 利用python中异常处理机制返回404页面,使用socket·模块进行编写==
import socket
if __name__ == '__main__':
# 创建套接字
tcp_sever_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口号释放
tcp_sever_socket.setsockopt(socket.SOL_SOCKET, socket.SOCK_STREAM, True)
# 设置端口号
tcp_sever_socket.bind(("", 9000))
# 设置监听
tcp_sever_socket.listen(128)
while True:
accept_result = tcp_sever_socket.accept()
accept_ip = accept_result[1]
accept_socket = accept_result[0]
print(f"客户端信息:{accept_socket}\n客户端—端口号:{accept_ip}")
# 接收客户端的请求信息
client_2info = accept_socket.recv(4096)
client_info = client_2info.decode("utf-8")
print('接收数据为:', client_info)
rec_data = client_info.split(" ", 2)
print(rec_data)
print(rec_data[1].split("/")[1])
try:
# 打开文件读取文件中的数据
with open(rec_data[1].split("/")[1], "rb") as File: # 用with as 打开文件不用写close()
# 把File 看作对象即可
file_data = File.read()
except Exception as a:
# 打开文件发生异常 返回404
response_line = "HTTP/1.1 404 Error \r\n"
# 响应头
response_header = "Server: szw/1.1 \r\n"
# 空行
# 响应体
with open("erroe.html", "rb") as File: # 用with as 打开文件不用写close()
# 把File 看作对象即可
fd = File.read()
response = response_line + response_header + "\r\n"
response_data = response.encode("utf-8") + fd
accept_socket.send(response_data)
else:
# 没有异常显示 200 OK
# 把数据进行按照http协议 响应报文 进行封装再次发送
# http response 报文格式: # 响应行
response_line = "HTTP/1.1 200 OK \r\n"
# 响应头
response_header = "Server: szw/1.1 \r\n"
# 空行
# 响应体
response = response_line + response_header + "\r\n"
response_data = response.encode("utf-8") + file_data
accept_socket.send(response_data)
finally:
accept_socket.close()