01-模拟浏览器请求web服务器
案例目的¶
模拟浏览器请求web服务器的网页过程,使用TCP实现 HTTP协议请求报文格式和响应报文格式。
案例实现¶
import socket
# 创建TCP连接
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# DNS解析 和 连接HTTP服务器
tcp_socket.connect(("www.itcastcpp.cn", 80))
# 组包 发送HTTP请求报文
# 请求行
request_line = "GET / HTTP/1.1\r\n"
# 请求头
request_header = "Host: www.itcastcpp.cn\r\n"
request_data = request_line + request_header + "\r\n"
# 发送请求
tcp_socket.send(request_data.encode())
# 接收响应报文
response_data = tcp_socket.recv(4096)
# 对响应报文进行解析 -- 切割
response_str_data = response_data.decode()
# print(response_data)
# '\r\n\r\n'之后的数据就是响应体数据
index = response_str_data.find("\r\n\r\n")
# 切割出的数据就是文件数据
html_data = response_str_data[index+4:]
# data_file = open("index.html", "wb")
# data_file.write(html_data.encode())
# data_file.close()
with open("index.html", "wb") as file:
file.write(html_data.encode())
# 关闭套接字
tcp_socket.close()