【问题标题】:Handling 404 and internal server errors with perl WWW::Mechanize使用 perl WWW::Mechanize 处理 404 和内部服务器错误
【发布时间】:2012-06-10 22:27:15
【问题描述】:

我正在使用 WWW::Mechanize 来抓取网站,它工作得很好,除了有时它会访问返回错误代码 404 或 500(未找到或内部服务器错误)的页面,然后我的脚本将退出并停止运行。这真的把我的数据收集弄乱了,所以无论如何 WWW::Mechanize 会让我捕捉这些错误并查看返回了什么样的错误代码(即 404,500 等)。感谢您的帮助!

【问题讨论】:

    标签: perl http-status-code-404 www-mechanize


    【解决方案1】:

    关闭autocheck,手动检查status(),返回响应的HTTP状态码。

    这是一个 3 位数字,例如 200 表示 OK404 表示 Not Found,等等开。

    use strict;
    use warnings;
    use WWW::Mechanize;
    
    my $url = 'http://...';
    my $mech = WWW::Mechanize->new(autocheck => 0);
    $mech->get($url);
    
    print $mech->status();
    

    请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 了解状态代码定义

    如果状态码是400或以上,那么你得到错误...

    【讨论】:

      【解决方案2】:

      您需要禁用自动检查:

      my $mech = WWW::Mechanize->new( autocheck => 0 );
      
      $mech->get("http://somedomain.com");
      
      if ( $mech->success() ) {
          ...
      }
      else {
          print "status is: " . $mech->status;
      }
      

      另外,顺便说一句,看看WWW::Mechanize::Cached::GZipWWW::Mechanize::Cached 以在测试你的机械脚本时加快你的开发速度。

      【讨论】:

      • autodie => 0 是我认为的新方法
      • @surfer190 你确定你不是指autocheck => 0(就像我的例子)?我在文档中没有看到 autodie
      • 啊我错了,这是给WWW::Mechanize::Firefox
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多