在 Perl 下下载压缩文件

Downloading a compressed file under Perl

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

我搜索了 CPAN、Whosebug 和 Perl Monks,下面的代码片段下载文件并将其存储在磁盘上(并且在您按下 <> 的回车键之前不会删除它。)

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 我得到一个可以解压的文件。 上面的脚本保存了一个文件.....我打不开。

两个 return 文件大小相同,具有相同的 md5sum 校验和,并且似乎具有相同的前 64 字节和后 64 字节.....

我错过了什么?我如何获得这个该死的文件?

谢谢...

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

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

****GGNNNNN*****

TIP - 阅读 ACTUAL 问题!!!

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

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