запрашивать данные неопределенно в curl - PullRequest
2 голосов
/ 07 апреля 2011

У меня есть файл 200 МБ для скачивания. Я не хочу загружать его напрямую, передавая URL в cURL (потому что мой колледж блокирует запросы объемом более 150 МБ). Таким образом, я могу загружать данные порциями по 10 МБ, передавая параметры диапазона в cURL. Но я не знаю, сколько 10MB кусков нужно загрузить. Есть ли способ в cURL, чтобы я мог загружать данные бесконечно. Нечто подобное

while (следующий байт присутствует) скачать байт;

Спасибо:)

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

командной строки curl позволяет вам указать диапазон для загрузки, так что для вашего максимума в 150 мг вы будете делать что-то вроде

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

и так далее, пока вся вещь не будет загружена, захватывая куски по 100 мг за рази добавление каждого куска в локальную копию.

1 голос
/ 07 апреля 2011

У 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 все еще соответствовал, хотя была показана вышеупомянутая ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...