通过不良连接下载大文件

Cro*_*ten 35 download http curl

是否有现有工具可用于通过不良连接下载大文件?

我必须定期下载一个相对较小的文件:300 MB,但慢速(80-120 KB/秒)TCP 连接在 10-120 秒后随机中断。(这是一家大公司的网络。我们多次联系他们的管理员(在印度工作),但他们不能或不想做任何事情。)问题可能出在他们的反向代理/负载平衡器上。

到目前为止,我使用了 pcurl 的修改版本:https : //github.com/brunoborges/pcurl

我改变了这一行:

curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
Run Code Online (Sandbox Code Playgroud)

对此:

curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
    --retry-max-time 0 -C - --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
Run Code Online (Sandbox Code Playgroud)

我不得不补充,--speed-limit 2048 --speed-time 10因为连接失败时通常会挂起几分钟。

但是最近连这个脚本都完成不了。

一个问题是它似乎忽略了该-C -部分,因此在重试后它不会“继续”该段。它似乎截断了相关的临时文件,并在每次失败后从头开始。(我认为--range-C选项不能一起使用。)

另一个问题是该脚本同时下载所有段。它不能有 300 个分段,其中一次只能下载 10 个分段。

我正在考虑为此特定目的用 C# 编写一个下载工具,但是如果有一个现有的工具,或者 curl 命令可以使用不同的参数正常工作,那么我可以腾出一些时间。

更新 1:附加信息:不应删除并行下载功能,因为它们有每个连接的带宽限制(80-120 KB / 秒,主要是 80),因此 10 个连接可以导致 10 倍的加速。我必须在 1 小时内完成文件下载,因为文件每小时生成一次。

Sté*_*las 39

lftp维基百科)对此有好处。它支持多种协议,可以使用多个并发并行连接下载文件(在有大量非拥塞导致的数据包丢失的情况下很有用),并且可以自动恢复下载。它也是可编写脚本的。

这里包括您提出的微调(归功于您):

lftp -c 'set net:idle 10
         set net:max-retries 0
         set net:reconnect-interval-base 3
         set net:reconnect-interval-max 3
         pget -n 10 -c "https://host/file.tar.gz"'
Run Code Online (Sandbox Code Playgroud)


roa*_*ima 13

我无法在你的情况下为你测试这个,但你不应该使用--rangewith -C -。以下是手册页对该主题的说明:

使用 -C -告诉curl自动找出/如何恢复转让。然后它使用给定的输出/输入文件来解决这个问题。

试试这个:

curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
    --retry-max-time 0 -C - -o "${FILENAME}.part${i}" "${URL}" &
Run Code Online (Sandbox Code Playgroud)

我还强烈建议您始终双引号您的变量,以便 shell 不会尝试解析它们。(考虑一个 URL https://example.net/param1=one&param2=two,其中 shell 将在 处拆分值&。)

顺便说一下,120 KB/s 大约是 1.2 Mb/s,这是世界许多地方的典型 xDSL 上传速度。每 MB 10 秒,因此整个文件不到一小时。没那么慢,虽然我很欣赏你更关心可靠性而不是速度。

  • 谢谢你。这种方法可行,但速度很慢,因为它不是并行下载。他们有每个连接的速度限制,我必须在 1 小时内完成下载,因为他们每小时生成文件。更新问题。 (2认同)

小智 8

也许你有更多的运气wget --continue

wget --continue ${URL}
Run Code Online (Sandbox Code Playgroud)

另见https://www.cyberciti.biz/tips/wget-resume-broken-download.html