在curl中无限期地请求数据

时间:2011-04-07 01:19:20

标签: bash curl download

我有200MB文件要下载。我不想通过将URL传递给cURL直接下载它(因为我的大学阻止了超过150MB的请求)。 因此,我可以通过将范围参数传递给cURL来下载10MB的数据块。但我不知道要下载多少10MB的块。在cURL中是否有一种方法可以无限期地下载数据。更像是

while(下一个字节存在) 下载字节;

谢谢:)

2 个答案:

答案 0 :(得分:2)

命令行curl允许您指定要下载的范围,因此对于最大150meg,您可以执行类似

的操作
curl http://example.com/200_meg_file -r 0-104857600 > the_file
curl http://example.com/200_meg_file -r 104857601-209715200  >> the_file

等等,直到整个内容被下载,一次抓取100meg块并将每个块附加到本地副本。

答案 1 :(得分:1)

Curl已经能够恢复下载。就像这样跑:

$> curl -C - $url -o $output_file

当然,这本身就不知道何时停止。但是编写一个包装器会非常容易。像这样:

#!/bin/bash
url="http://someurl/somefile"
out="outfile"

touch "$out"
last_size=-1
while [ "`du -b $out | sed 's/\W.*//'`" -ne "$last_size" ]; do
    curl -C - "$url" -o "$out"
    last_size=`du -b $out | sed 's/\W.*//'`
done

我应该注意curl输出一个有趣的错误:

curl: (18) transfer closed with outstanding read data remaining

然而,我在一个相当大的ISO文件上测试了这个,并且即使显示上述错误,md5仍然匹配。