【问题标题】:perl LWP::UserAgent gives a cryptic error messageperl LWP::UserAgent 给出一个神秘的错误信息
【发布时间】:2021-01-18 12:58:57
【问题描述】:

代码如下:

$vizFile ='https://docs.recipeinvesting.com/t.aaaf.html'; 
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
my $response = $ua->get($vizFile);
if ($response->is_success) {print $response->decoded_content;}
else {print"\nError= $response->status_line]n";}

我收到消息:

Error= HTTP::Response=HASH(0x3a9b810)->status_line]n

如果我把它放在浏览器中,这个网址就可以正常工作。

这一直有效(使用纯 http,使用 LWP::Simple),直到站点进行了一些更改。

会不会是 https 造成了影响?

有什么方法可以让错误信息不那么神秘吗?

【问题讨论】:

  • 要得到真正的错误信息,把它改成 print"\nError=", $response->status_line, "]\n"
  • 方法调用不插入双引号。
  • 提示:您应该始终使用use strict; use warnings;。如果您已经在使用它们,请忽略这一点:)(在这种特定情况下它们不会有帮助。)

标签: perl lwp-useragent


【解决方案1】:

您不能将代码放在字符串文字中并期望它被执行。当然,您可以放置​​用于插值的变量,但制作方法调用属于支持的另一端。

替换

print"\nError= $response->status_line]n";

print "\nError= " . $response->status_line . "\n";

use feature qw( say );

say "\nError= " . $response->status_line;

这将根据需要打印状态行。

【讨论】:

  • 为了完整起见,这也可以:print "Error= @{[ $response->status_line ]}\n"
  • @Guido Flohr,有很多有用的东西。但这并不意味着您应该使用它们。 ".( ... )." 实际上并不比 @{[ ... ]} 长,只是它没有复杂性或费用,而且它不会在错误的上下文中调用该方法。
【解决方案2】:

请查看以下演示代码,建议在代码中包含use strict;use warnings;,这将帮助您避免许多潜在问题

use strict;
use warnings;
use feature 'say';

use LWP::UserAgent;

my $url ='https://docs.recipeinvesting.com/t.aaaf.html'; 
my $ua  = LWP::UserAgent->new;

$ua->timeout(10);
$ua->env_proxy;

my $response = $ua->get($url);

if( $response->is_success ){
    say $response->decoded_content;
} else {
    die $response->status_line;
}

文档:LWP::UserAgent

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2023-03-06
    • 2013-01-02
    • 2021-12-01
    • 2020-01-11
    相关资源
    最近更新 更多