Как я могу проверить, что я скачал весь файл в Perl? - PullRequest
3 голосов
/ 28 апреля 2010

Имеет ли смысл здесь проверка размера файла? Я пытался обрезать соединение во время загрузки, но похоже, что размер теста никогда не достигается.

#!/usr/bin/env perl
use warnings; 
use strict;
use 5.012;
use LWP::Simple;

my $url = 'http://www.kernel.org/pub/linux/kernel/v2.6/next/patch-v2.6.34-rc5-next-20100428.bz2';
my $file = 'next_kernel.bz';
my $file_size = '3462166';

my $response = getstore( $url, $file );
if ( is_success $response ) {
    if ( $file_size == -s $file ) {
        say "OK";
    }
    else {
        say "Not OK";
    }
}

Ответы [ 3 ]

2 голосов
/ 28 апреля 2010

Если вы просто хотите применить тестовый код, укажите неправильный размер файла и подтвердите, что ваша загрузка не в порядке. Если вы хотите проверить, что происходит с прерванным соединением, вам нужен намного больший файл - загрузка в 2342 байта должна занимать доли доли секунды.

1 голос
/ 28 апреля 2010

Это странно, я получил те же результаты, что и вы. У меня нет решения, но я сообщаю здесь о небольшом взломе вокруг вашей проблемы.

Происходит следующее: сохраненный файл больше ожидаемого и разрыв соединения отсутствует. Попытка bunzip2 выдаст ошибку даже после усечения полученного файла до нужного размера.

Точно такой же результат был достигнут при использовании LWP :: UserAgent с параметром: content_file для метода get (). То же самое снова добавляем обработчик response_data к объекту $ ua.

Но следующая команда дала мне хорошие результаты:

GET http://www.kernel.org/pub/linux/kernel/v2.6/next/patch-v2.6.34-rc5-next-20100428.bz2> next_kernel.bz

А так как GET является сценарием lwp-запроса, основанным на LWP, вы можете найти ответы, проверив его код, если хотите углубиться в это.

Надеюсь, это поможет вам.

0 голосов
/ 28 апреля 2010

Полагаю, это не помешает, но я вполне уверен, is_success не вернет true, если соединение прервано.

...