文章目录
1. 开发自己的静态Web服务器
实现步骤:
- 编写一个TCP服务端程序
- 获取浏览器发送的http请求报文数据
- 读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。
- HTTP响应报文数据发送完成以后,关闭服务于客户端的套接字。
2. 静态Web服务器-返回固定页面数据的示例代码
import socket
# 判断是否是主模块的代码
if \_\_name\_\_ == '\_\_main\_\_':
# 创建tcp服务端套接字
tcp\_server\_socket = socket.socket(socket.AF\_INET, socket.SOCK\_STREAM)
# 设置端口号复用,程序退出端口号立即释放
tcp\_server\_socket.setsockopt(socket.SOL\_SOCKET, socket.SO\_REUSEADDR, True)
# 绑定端口号
tcp\_server\_socket.bind(("", 8000))
# 设置监听
tcp\_server\_socket.listen(128)
# 循环等待接受客户端的连接请求
while True:
# 等待接受客户端的连接请求
new\_socket, ip\_port = tcp\_server\_socket.accept()
# 代码执行到此,说明连接建立成功
# 接收客户端的请求信息
recv\_data = new\_socket.recv(4096)
print(recv\_data)
# 打开文件读取文件中的数据
with open("static/index.html", "r") as file: # 这里的file表示打开文件的对象
file\_data = file.read()
# 提示: with open 关闭文件这步操作不用程序员来完成,系统帮我们来完成
# 响应行
response\_line = "HTTP/1.1 200 OK\\r\\n"
# 响应头
response\_header = "Server: PWS/1.0\\r\\n"
# 响应体
response\_body = file\_data
# 把数据封装成http 响应报文格式的数据
response = response\_line + response\_header + "\\r\\n" + response\_body
# 把字符串编码成二进制
response\_data = response.encode("utf-8")
# 发送给浏览器的响应报文数据
new\_socket.send(response\_data)
# 关闭服务于客户端的套接字
new\_socket.close()
3. 小结
编写一个TCP服务端程序
tcp\_server\_socket = socket.socket(socket.AF\_INET, socket.SOCK\_STREAM)
# 循环接受客户端的连接请求
while True:
conn\_socket, ip\_port = tcp\_server\_socket.accept()
获取浏览器发送的http请求报文数据
client\_request\_data = conn\_socket.recv(4096)
读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。
response\_data = (response\_line + response\_header + "\\r\\n").encode("utf-8") + response\_body
conn\_socket.send(response\_data)
HTTP响应报文数据发送完成以后,关闭服务于客户端的套接字。
conn\_socket.close()
静态Web服务器-返回指定页面数据
学习目标
能够写出组装指定页面数据的响应报文