Как скачать бинарный файл с HTTP :: UserAgent - PullRequest
0 голосов
/ 18 января 2019

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

Malformed UTF-8

Я пытался использовать подпрограмму getstore, экспортированную в подмножество :simple.

getstore($upstream ~ %module<link>, $dist.absolute);

И напрямую используя класс HTTP::UserAgent.

my $ua = HTTP::UserAgent.new;

$dist.spurt: $ua.get($upstream ~ %module<link>).content;

Просматривая исходный код модуля, я нашел аргумент :bin для .get, поэтому, естественно, я это тоже попробовал.

$dist.spurt: $ua.get($upstream ~ %module<link>, :bin).content;

Но даже с аргументом :bin я получаю ошибку Malformed UTF-8.

Как мне скачать бинарный файл, используя HTTP::UserAgent?

EDIT : Чтобы придать дополнительный контекст, $dist - это просто еще один объект IO::File, созданный с помощью tempdir.IO.add("dist.tar.gz"). Я также пытался .open этот файл и .spurt в IO::Handle вместо IO::File, но это вернуло ту же ошибку. Добавление :bin к вызову $dist.open также, похоже, не дает эффекта.

with ($dist.open(:w)) {
    LEAVE { .close }
    .spurt: $ua.get($upstream ~ %module<link>, :bin).content;
}

URL, с которым я работаю в данном конкретном случае, - https://cpan.metacpan.org/authors/id/V/VR/VRURG/Perl6/OO-Plugin-v0.0.5.tar.gz, но, похоже, он не ограничивается только этим URL.

1 Ответ

0 голосов
/ 19 января 2019

попробуйте параметр: bin для подпрограммы spurt. Это работает для меня (с http)

'/tmp/test.tar.gz'.IO.spurt( $ua.get('http://cpan.metacpan.org/authors/id/V/VR/VRURG/Perl6/OO-Plugin-v0.0.5.tar.gz').content, :bin);
...