我有这个 perl 脚本来提取网页的源代码:
#!/usr/bin/perl
use LWP::UserAgent;
my $ou = new LWP::UserAgent;
my $url = "http://google.com";
my $source = $ou->get("$url")->decoded_content;
print "$source\n";
Run Code Online (Sandbox Code Playgroud)
现在,我想在提取源代码之前检查互联网状态是否已连接。
检测远程服务器是否离线的最简单方法是尝试连接到它。使用LWP发送head请求(而不是get)仅检索 HTTP 标头信息而没有任何内容,并且您应该从任何在线服务器获得快速响应
LWP::UserAgent对象的默认超时为三分钟,因此您需要将其设置为更短的时间以进行快速测试
该程序将超时时间临时设置为 0.5 秒,发送一个 head 请求,如果结果是任何类型的错误,则报告服务器没有响应。在继续之前恢复原始超时值
根据您要测试的真实服务器,您需要仔细调整超时以避免出现误报
use strict;
use warnings 'all';
use constant URL => 'http://www.google.com/';
use LWP;
my $ua = LWP::UserAgent->new;
{
my $to = $ua->timeout(0.5);
my $res = $ua->head(URL);
unless ( $res->is_success ) {
die sprintf "%s is not responding (%s)\n", URL, $res->status_line;
}
$ua->timeout($to);
}
Run Code Online (Sandbox Code Playgroud)