用python写一个简单的web服务器,可以输出报文,找不到文件时显示404 not found,同时实现两个HTML之间的跳转
时间: 2024-05-02 18:21:50 浏览: 23
以下是一个简单的Python web服务器,它可以输出报文,找不到文件时显示404 not found,并且可以实现两个HTML之间的跳转。
```python
import socket
import os
def serve_client(conn):
# 从客户端接收请求
request = conn.recv(1024).decode()
# 解析请求,获取请求路径
path = request.split()[1]
# 如果请求路径是根路径,返回默认页面
if path == "/":
path = "/index.html"
# 如果请求的文件存在,返回文件内容
if os.path.isfile("." + path):
with open("." + path, "rb") as f:
content = f.read()
response = "HTTP/1.1 200 OK\r\nContent-Length: {}\r\n\r\n".format(len(content)).encode() + content
# 如果请求的文件不存在,返回404 not found
else:
response = b"HTTP/1.1 404 Not Found\r\nContent-Length: 13\r\n\r\n404 Not Found"
# 发送响应给客户端
conn.sendall(response)
# 关闭连接
conn.close()
def main():
# 创建套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口号
server_socket.bind(("localhost", 8000))
# 开始监听
server_socket.listen(1)
while True:
# 等待客户端连接
conn, addr = server_socket.accept()
# 处理客户端请求
serve_client(conn)
if __name__ == "__main__":
main()
```
在上面的代码中,我们首先创建了一个套接字并绑定了地址和端口号,然后在一个无限循环中等待客户端连接。每当有一个客户端连接时,我们就创建一个新的线程来处理该客户端的请求。在处理请求时,我们首先解析请求,获取请求路径。如果请求路径是根路径,我们将其转换为默认页面路径。然后,如果请求的文件存在,我们就读取文件内容并将其作为响应发送给客户端。如果请求的文件不存在,我们就返回404 not found。最后,我们关闭连接并等待下一个客户端连接。
要实现两个HTML之间的跳转,我们可以在HTML中使用超链接标签(`<a>`标签)。例如,如果我们想从`index.html`跳转到`about.html`,可以在`index.html`中添加以下代码:
```html
<a href="about.html">About</a>
```
这将在`index.html`中添加一个链接,当用户单击该链接时,浏览器将发送一个新的请求,请求路径为`/about.html`,我们的web服务器将返回`about.html`文件的内容。