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