0

我正在尝试检测链接是否损坏,就好像它是一个网址,我可以粘贴到我的浏览器中并找到一个网页。到目前为止,我已经尝试了两种在网上找到的方法,它们都给了我误报(LWP::UserAgent 和 LWP::Simple)。

#!/usr/bin/perl -w

use strict;
use LWP::UserAgent;

my $url1 = 'http://www.gutenberg.org';
my $url2 = 'http://www.gooasdfzzzle.com.no/thisisnotarealsite';


my $ua = LWP::UserAgent->new;
$ua->agent("Mozilla/8.0");  # Pretend to be Mozilla

my $req = HTTP::Request->new(GET => "$url1");
my $res = $ua->request($req);

if ($res->is_success) {
    print "Success!\n";
} else {
    print "Error: " . $res->status_line . "\n";
}

$req = HTTP::Request->new(GET => "$url2");
$res = $ua->request($req);

if ($res->is_success) {
    print "Success!\n";
} else {
    print "Error: " . $res->status_line . "\n";
}

这给了我以下输出:

Success!
Success!

然后有

#!/usr/bin/perl -w

use strict;
use LWP::Simple;

my $url1 = 'http://www.gutenberg.org';
my $url2 = 'http://www.gooasdfzzzle.com.no/thisisnotarealsite';

if (head("$url1")) {
    print "Yes\n";
} else {
    print "No\n";
}

if (head("$url2")) {
    print "Yes\n";
} else {
    print "No\n";
}

这给了我一个输出:

Yes
Yes

我在这里错过了什么吗?

4

1 回答 1

0

您的代码对我来说运行良好,如果您如前所述在 VPN 或网关后面运行,我只能看到问题。始终使用strictand warnings,这是另一种方法,因此您不必在每次要检查有效链接时都初始化新的 Request 对象。

use strict;
use warnings; 
use LWP::UserAgent; 

sub check_url { 
  my ($url) = @_; 
  my $ua = LWP::UserAgent->new; 
  my $req = HTTP::Request->new(HEAD => $url);
  my $res = $ua->request($req); 
  return $res->status_line if $res->is_error;
  return "Success: $url"; 
} 
于 2013-05-13T13:03:59.507 回答