当我们使用浏览器打开网页的时候,浏览器就是一个客户端,浏览器也会创建socket对象与要访问的网站建立连接。
下面一个例子简单实现了基于tcp协议的访问百度并保存成html文件的功能
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('www.baidu.com', 80))
sock.send(b'GET / HTTP/1.1\r\nHOST: www.baidu.com\r\nConnection:close\r\n\r\n')
buffer = []
while True:
content = sock.recv(1024) #以1024字节(1kb)为一个单位进行接收,直到完全接收所有数据。
if content:
buffer.append(content)
else:
break
web_content = b''.join(buffer)
#分割http协议头,保存的html文件不包含http协议头
http_header, http_content = web_content.split(b'\r\n\r\n', 1)
with open('baidu.com.html', 'wb') as f:
f.write(http_content)