Perl 大型下载直接到文件(以避免 RAM 过载)

Perl large download direct to file (to avoid RAM overload)

我正在尝试将大约 1 GB 的文件下载到具有 1 GB RAM 内存的服务器,因此如果我尝试将其下载到变量(下面的代码)中,OS由于 RAM 过载而终止进程。

require LWP::UserAgent;

my $ua = LWP::UserAgent->new;
$ua->timeout(3600);
$ua->env_proxy;

my $response = $ua->get('http://example.com/largefile.xml');

if ($response->is_success) {
    print "File downloaded\n";
}
else {
    die $response->status_line;
}

我认为唯一可行的方法是使用 system("wget ...")(或 curl 或类似的东西),但我确信有一个正确的方法可以直接使用 Perl。

您是否知道不使用系统调用直接将其下载到文件的方法或选项?

是的。看看LWP::UserAgentget方法:

$ua->get( $url , $field_name => $value, ... )

Fields names that start with ":" are special. These will not initialize headers of the request but will determine how the response content is treated. The following special field names are recognized:

:content_file   => $filename

If a $filename is provided with the :content_file option, then the response content will be saved here instead of in the response object.

注意 - 它可能无法很好地处理文件系统错误,因此请检查您是否可以写入该位置。 (权限、目录存在等)