无法使用 Perl 和 LWP 下载 PDF

Unable to download PDFs with Perl and LWP

我正在尝试使用 Perl 中的 LWP::Simple 从联合国网站(安理会决议等)下载一些 PDF 文档。然而,我没有返回 PDF,而是收到 HTML 错误页面。考虑这个非常简单的例子:

use LWP::Simple;
use strict;

my $url = 'https://documents-dds-ny.un.org/doc/UNDOC/GEN/N16/100/02/PDF/N1610002.pdf';
my $file = 'test.pdf';
getstore($url, $file);

如果我再查看 "test.pdf" 的内容,我发现它们是一个 HTML 页面。

我也用 LWP::UserAgent 甚至 cURL 尝试了一些技巧,但没有成功。有什么想法吗?

好的,感谢@SteffenUllrich 和@ikegami 让我走上正轨!

确实是cookie的问题。修复?打开一个 cookie jar,首先访问站点的主页,然后在 cookie 存储在 jar 中后访问 PDF。

这可以在不使用 HTTP::Cookies 的情况下完成。但是,我们需要使用 LWP::UserAgent 而不是 LWP::Simple。

下面的最小工作示例:

use strict;
use warnings 'all';

use LWP::UserAgent;

my $homeUrl       = "https://documents.un.org/prod/ods.nsf/home.xsp"; 
my $pdfUrl        = "https://documents-dds-ny.un.org/doc/UNDOC/GEN/N16/100/02/PDF/N1610002.pdf";
my $pdfOutputName = "test.pdf"; 

my $browser = LWP::UserAgent->new( cookie_jar => { } );

my $resp;

$resp = $browser->get( $homeUrl );
die $resp->status_line unless $resp->is_success;

$resp = $browser->get( $pdfUrl, ':content_file' => $pdfOutputName );
die $resp->status_line unless $resp->is_success;

这将生成一个完整的 PDF 文件。