我正在尝试检测链接是否损坏,如果它是一个网址我可以粘贴到我的浏览器中并找到一个网页。到目前为止,我已经尝试了两种方法,我在网上发现了两种方法都给了我误报(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
我在这里遗漏了什么吗?
答案 0 :(得分:0)
您的代码对我来说运行正常,如果您在前面所述的VPN或网关后面运行,我只能看到问题。始终使用strict
和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";
}