大文件下载中断不想重来:用 curl 续传并检查服务器响应

2026-10-24 / 0 评论 / 3 阅读

大文件下载中断不想重来:用 curl 续传并检查服务器响应 教程示意图

适用场景

下载系统镜像或公开软件包时,网络中断可能让数百兆字节的传输只完成一部分。如果服务器支持范围请求,并且远端文件保持不变,就可以尝试从断点继续。本文使用 Linux、Bash、curl 和常见 GNU 工具,目标是完成一次能够检查响应和最终文件的续传流程。

优先选择厂商或成熟开源项目提供的固定版本 HTTPS 下载链接。不要使用名称相同却会不断替换内容的“最新版”链接练习,也不要把登录页面、分享页面地址直接当作文件地址。

原理:按已有长度请求剩余字节

续传时,客户端先取得本地部分文件的长度,再要求服务器发送后面的字节。服务器正常接受范围请求时,通常返回部分内容状态码 206,并通过 Content-Range 响应头描述发送的区间和资源总长度。续传工作方式

这并不自动证明本地前半段与服务器当前文件属于同一版本。服务器可能更新文件,下载链接可能跳转到不同资源,旧文件也可能早已损坏。HTTP 标准定义了范围请求和条件范围机制,但本教程的基本续传命令不会自动替你证明文件身份,因此最终仍要核对发布方的完整性校验结果。HTTP 范围请求标准

准备工作

从官方发布页面取得固定版本的直接下载链接,并记录文件名称、版本、公布的大小和校验值。确认磁盘可容纳完整文件,也有足够余量保留失败副本。

先查看工具版本,再创建独立目录:

curl --version
mkdir -m 700 "$HOME/curl-resume-demo"

只有目录创建成功后才继续。若目录已存在,先检查内容或换一个新名字,并同步调整后续路径。不要在放有正式镜像的目录里直接练习,以免覆盖同名文件。

分步骤操作

第一步:进入目录并读取真实链接

cd "$HOME/curl-resume-demo"
read -r -p '粘贴官方固定版本 HTTPS 文件链接:' download_url

确认切换目录成功后再输入链接。download_url 保存读者从官方页面复制的实际地址;不要输入带账号、密码或私有访问令牌的地址。后续命令中的引号用于保护地址里的特殊字符。

第二步:开始下载并保留部分文件

curl --fail --location \
  --proto '=https' --proto-redir '=https' \
  --dump-header first.headers \
  --output download.part "$download_url"

输出统一写入 download.part,响应头保存在 first.headers。跟随跳转选项用于处理官方下载入口的正常重定向,协议选项限制初始请求和跳转都使用 HTTPS;失败选项使常见 HTTP 错误返回失败状态。curl 参数说明

自然发生中断后保留该文件。需要主动演练时,只对不重要的公开下载按一次 Ctrl+C。若文件已经完整下载,无需为了演示再破坏它。

第三步:检查长度并执行续传

wc -c download.part
curl --fail --location \
  --proto '=https' --proto-redir '=https' \
  --continue-at - \
  --dump-header resume.headers \
  --output download.part "$download_url"
transfer_status=$?
printf 'curl 退出状态:%s\n' "$transfer_status"

续传参数后的单独短横线表示让 curl 根据已有输出文件自动计算起点。必须使用同一个部分文件,也必须确认链接仍对应同一固定版本。如果换了终端,需要重新进入目录并读取原来的官方链接。

退出状态要紧接下载命令保存,避免被其他命令覆盖。零表示此次传输成功结束,非零需要结合错误信息继续分析。不要同时加入另一组手写范围参数,因为 curl 文档明确说明它与续传参数互斥。

第四步:查看响应并核验最终文件

cat resume.headers
wc -c download.part
sha256sum download.part

跳转会留下多组响应头,应查看最终文件响应。对于从非零位置开始的普通 HTTP 续传,重点检查最终是否为 206,以及 Content-Range 起点是否与续传前的字节数一致。这里的大小检查用于发现明显不符,不能替代完整性验证。

将计算出的 SHA256 与同一官方版本页面公布的完整值逐字比较。如果发布方使用其他校验算法或提供签名,应遵循其官方验证流程。仅计算本地哈希而没有可信的预期值,不能证明下载正确。

验证方法

可使用的成果应同时具备:传输正常结束、版本对应正确、大小没有明显异常,以及官方完整性校验通过。校验通过前保持部分文件名称,不要挂载镜像、安装软件或执行其中的程序。

如果校验不一致,保留错误信息,重新确认链接和版本,再使用一个全新文件从头下载。不要因为文件能够解压就忽略校验失败。

常见错误

服务器不支持续传时,curl 可能报告无法恢复传输;不要改成手工拼接响应内容。范围不可满足状态码 416 可能与本地长度过大、文件已变化或已下载完成有关,不能一律当作成功。

最终返回 200 也不能直接认为续传成立,应检查服务器是否忽略范围请求。远端更换版本时,即使续传没有明显报错,也可能得到前后内容不一致的文件,最终校验尤其重要。

安全与回退

保持证书校验开启,不要通过跳过校验解决下载错误。不要让两个下载进程同时写同一个部分文件,也不要在续传失败后直接修改文件内容尝试修补。

回退时可保留部分文件供分析,换一个新文件名从头下载;确认不再需要后再删除练习文件。响应头可能包含下载服务的内部标识,分享日志前应检查并去除敏感内容。

参考资料与转载说明

本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。

评论一下?

OωO
取消