在Perl下下载压缩文件

时间:2015-08-13 08:32:46

标签: perl lwp-useragent

我正在尝试下载一个.tar.gz文件(然后我将解压缩....但这是以后的。)

我通过CPAN,Stackoverflow和Perl Monks进行了搜索,下面的snippit会下载文件&amp;将它存储在磁盘上(直到你点击<>的输入后才删除它。)

use LWP::UserAgent;
use File::Temp;

# Create temporary file, and delete on script-exit
my $tmp = File::Temp->new( TEMPLATE => 'hathiXXXX', SUFFIX=>'.tar.gz', UNLINK=>1 );

my $uri = 'http://lucas.ucs.ed.ac.uk/test/hathi_full_20150701.txt.gz';
my $ua = LWP::UserAgent->new();

# Set the mime-type for a .tar.gz file
$ua->default_header('Accept' => 'application/x-gzip');

# ':content_file' => $tmp->filename is LWP magic to write to a file
my $res = $ua->get($uri, ':content_file' => $tmp->filename);
print $tmp->filename . "\n";

# Once you hit enter, the temporary file is deleted
<>;

使用wget我得到一个可以解压缩的文件。 上面的脚本保存了一个我无法打开的文件。

两个返回大小相同的文件,具有相同的md5sum校验和,并且看起来具有相同的第一个&amp;最后64个字节.....

我错过了什么?我怎么得到这个dang文件?

...谢谢

(Perl:5.18.2; LWP :: UserAgent:6.05; File :: Temp:0.23)

2 个答案:

答案 0 :(得分:1)

您下载的文件是txt.gz文件,似乎包含制表符分隔数据,而不是tar格式文件。

答案 1 :(得分:1)

**** ***** GGNNNNN

提示 - 阅读 ACTUAL 问题!!!

正在下载的文件后缀为.txt.gz - 它不是tar文件。使用GUI工具打开它会起作用,因为他们不会做出愚蠢的假设并无缝地为工作选择正确的工具。

txt.gz结尾的文件需要使用gunzip解压缩,而不是tar