|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 06 Dec 2002 22:00:30 To : Dmitry Suhodoev Subject : Re: как контролироват ь скачку через LWP? -------------------------------------------------------------------------------- Dmitry Suhodoev wrote: > заказываю я, пpедположим, файлик чеpез LWP, а весь он мне не нужен, нужен > только опpеделенный кусок сначала. как мне скpиптом пpеpвать скачку, когда я > достиг нужного мне объема? Во первых просить у сервера не файл целиком, а нужный кусок. Для чего в заголовок запроса добавить: Range: bytes=xxx-yyy, например: my $req = HTTP::Request->new(GET => 'http://www.somewhere.net/file'); $req->header('Range' => "bytes=$from-$to"); После чего проверять в ответе, принял ли сервер эту рекомендацию к действию или нет. my $resp = $ua->request($req); $resp->is_success or die "Error"; if ($resp->code == 206) { # PARTIAL_CONTENT # Ага, сервер вернул только запрошенный кусок } else { # Сервер вернул все } Hу и во вторых. Если сервер не умеет возвращать часть файла, то можно использовать callback функцию (см. perldoc LWP::UserAgent на предмет callback). Функция должна сама складировать полученные данные в $response->content, а в нужный момент инициировать исключение (die) и процесс перекачки прервется. И в третьих, забудьте все, что я сейчас написал. Есть документированный способ сделать это с помощью метода max_size или передав максимальный размер в качестве третьего аргумента в метод request (второй аргумент может быть undef). См. perldoc LWP::UserAgent ;-) Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6577834816df.html, оценка из 5, голосов 10
|