【问题标题】:Get reason for failed LWP::Simple head request获取 LWP::Simple 头部请求失败的原因
【发布时间】:2021-06-24 13:49:06
【问题描述】:

我已将我的脚本从 CentOS 7 迁移到 8,并且有一个新的 Perl 版本。我有以下 sn-p 使用 head 来检查 URL 是否存在:

#!/bin/perl
use strict;
use warnings;
use LWP::Simple;

my $sitemapurl = "https://www.prosinger.net";
if (head($sitemapurl)) {
    ...
}
else {
    print "The $sitemapurl doesn't exist\n";
    exit(1);
}

它现在总是返回 URL 不存在。我很确定这与 https 有关(我安装了 perl-LWP-Protocol-https),但我不确定如何从 head 方法获取任何反馈信息以检查错误代码是什么。 有什么想法吗?

【问题讨论】:

    标签: perl lwp


    【解决方案1】:

    您可以使用LWP::UserAgent 代替LWP::Simple,这样您会收到错误消息:

    my $ua = LWP::UserAgent->new;
    my $sitemapurl = "https://www.prosinger.net";
    my $req = $ua->head($sitemapurl);
    if ($req->is_success) {
        ...
    } else {
        die "Could not head($sitemapurl): " . $req->status_line;
    }
    

    运行此代码打印:

    Could not head(https://www.prosinger.net): 403 Forbidden at head.pl line 15.

    您可以通过在 LWP::UserAgent 对象中设置用户代理来解决此问题(针对此特定网站;这不适用于所有网站):

    my $ua = LWP::UserAgent->new( agent => 'anything seems to work' );
    

    有趣的是HTTP::Responsedecoded_content 方法,它允许您获取请求的内容(在这种情况下您不需要它,但以后可能会用到):

    my $req = $ua->get(...);
    if ($req->is_success) {
        my $content = $req->decoded_content;
        ...
    }
    

    【讨论】:

    • 到目前为止我还没有考虑更改代码。我的疑问是,这个完全相同的代码在旧系统安装上工作。
    • 不幸的是,head 的文档说如果请求失败,它会返回 undef(我已经检查了 code,这确实是它返回的内容),并且使用 get won' t 工作,因为如果请求失败,它也会返回 undef(参见其 code),并且文档说“您将无法检查响应代码或响应标头”。恐怕LWP::Simple 顾名思义,很简单……
    【解决方案2】:

    您使用 LWP::Simple 的代码和切换到 LWP::UserAgent 的 Dada 版本基本上是在做同样的事情,只是您可以在使用 LWP::UserAgent 时获得错误的详细信息。

    运行 LWP::UserAgent 版本出现此错误:

    Could not head(https://www.prosinger.net): 500 Can't connect to www.prosinger.net:443 (SSL connect attempt failed error:2707307E:OCSP routines:OCSP_check_validity:status not yet valid)

    谷歌搜索该错误消息会给出this SO answer 作为第一个结果。您的客户端计算机和服务器上的时钟是否可能不同步?

    【讨论】:

      猜你喜欢
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 2022-06-21
      • 2021-01-18
      • 1970-01-01
      相关资源
      最近更新 更多