代码之家  ›  专栏  ›  技术社区  ›  spatiallyConfused

无法使用Perl和LWP下载PDF

  •  0
  • spatiallyConfused  · 技术社区  · 8 年前

    我正在尝试使用LWP::Simple in Perl从联合国网站(安全理事会决议等)下载一些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);
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   Borodin    8 年前

    好的,谢谢@SteffenUllrich和@ikegami让我走上了正确的轨道!

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

    这可以在不使用HTTP::Cookie的情况下完成。然而,我们需要使用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文件。