如何使用HTTP :: UserAgent下载二进制文件

时间:2019-01-17 22:24:15

标签: http perl6 raku

我正在尝试使用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;

在浏览模块的the source code时,我found a :bin argument for .get,所以我自然也尝试过。

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

但是即使使用:bin参数,我也会遇到Malformed UTF-8错误。

如何使用HTTP::UserAgent下载二进制文件?

编辑:要提供更多的上下文信息,$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 :(得分:2)

对于突增例程尝试:bin选项。这对我有效(使用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);