You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python requests下载大文件多字节范围时返回完整文件问题咨询

限制来源判定

该限制既不来自requests库,也不属于HTTP协议的强制约束,是你访问的NOAA站点所用Apache服务器的默认配置导致:

  • Apache服务器默认有MaxRanges配置项,默认值为20,当请求携带的字节范围数量超过该阈值时,服务器会直接忽略Range请求头,返回完整文件,和你测试得到的阈值完全吻合。
  • HTTP协议本身没有对单请求的Range数量做上限规定,requests库也不会修改或截断你构造的Range头内容,可排除这两者的影响。

稳妥高效的实现方案

你可以按照以下逻辑改造代码,既不会下载多余数据,也不会给公共服务器造成过大压力:

1. 字节范围预处理

  • 按单批最多15~18个范围的阈值拆分所有待请求区间,不要卡20的上限,预留冗余应对不同服务器的配置波动。
  • 优先将位置临近的小范围合并为连续的大区间,即使多下载极少量无关字节,开销也远低于多发起一次HTTP请求,你可以根据自身业务的流量容忍度调整合并阈值。

2. 请求规则优化

  • 每批请求间隔设置为1~2秒,避免短时间请求量过高触发服务器限流规则。
  • 首次请求拿到文件ETag后,后续所有请求都携带If-Match头,值为该ETag,避免下载过程中源文件更新导致字节范围错位。
  • 每次收到响应后先校验Content-Type是否为multipart/byteranges,如果不是则重试当前批次,避免误下载完整文件浪费流量。

3. 本地文件拼接

  • 解析每批返回的multipart响应后,直接按字节偏移量将各个片段写入本地文件的对应位置,无需等待所有请求完成再处理,降低内存占用。

内容的提问来源于stack exchange,提问作者Karl Schneider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:45:05