在perl中检测断开的链接(web)

时间:2013-05-13 10:32:41

标签: perl lwp broken-links

我正在尝试检测链接是否损坏,如果它是一个网址我可以粘贴到我的浏览器中并找到一个网页。到目前为止,我已经尝试了两种方法,我在网上发现了两种方法都给了我误报(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

我在这里遗漏了什么吗?

1 个答案:

答案 0 :(得分:0)

您的代码对我来说运行正常,如果您在前面所述的VPN或网关后面运行,我只能看到问题。始终使用strictwarnings,这是另一种方法,因此每次要检查有效链接时都不会初始化新的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"; 
}