python下载大文件需流式下载+分块读取+连接复用+断点续传:设stream=true后用iter_content(chunk_size=8192)边下边写,禁用text/json;用with open('wb')安全写入;加user-agent、session复用连接;支持range时按已下载字节数续传。

Python 下载大文件时,默认的 requests.get() 容易内存溢出、速度慢、断连失败,核心优化方向是:流式下载 + 分块读取 + 连接复用 + 断点续传。
启用流式下载(stream=True)
不加 stream=True 会把整个响应体一次性加载进内存,几 GB 文件直接 OOM。开启后,响应体以迭代方式按需读取:
- 必须设置
stream=True,否则iter_content无效 - 推荐配合
response.iter_content(chunk_size=8192)每次读取 8KB,平衡 I/O 和内存 - 避免调用
response.text或response.json()—— 它们会强制加载全部内容
使用 with open(..., 'wb') 写入磁盘
边下载边写入文件,不缓存到内存;同时确保异常时文件句柄自动关闭:
- 用
with open(filename, 'wb') as f:管理文件,安全可靠 - 每次从
iter_content取 chunk 后立即f.write(chunk) - 不要先拼接所有 chunk 成 bytes 再写入 —— 失去流式意义
添加请求头与连接复用
提升成功率和速度,尤其对支持 Range 请求的服务器:
95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we
立即学习“Python免费学习笔记(深入)”;
- 加上
'User-Agent'防止被服务端拒绝 - 复用
requests.Session()复用 TCP 连接,减少握手开销 - 对支持断点续传的接口,可加
'Range': 'bytes=0-'(首次)或续传偏移量(如'bytes=1024000-')
简单断点续传实现
下载中途失败后,从已写入的字节数继续,避免重头开始:
- 先检查本地文件是否存在,用
os.path.getsize()获取已下载字节数 - 若文件存在且非空,设置请求头
'Range': f'bytes={file_size}-' - 响应状态码应为
206 Partial Content(不是 200),确认服务端支持 - 打开文件用
'ab'模式追加写入,而非覆盖
不复杂但容易忽略 —— 关键是别让响应体进内存、别手动拼大 bytes、别忽略服务端是否支持 Range。









