在perl中检测互联网是否已连接

ßł *_*ặwk 0 perl

我有这个 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)

现在,我想在提取源代码之前检查互联网状态是否已连接。

Bor*_*din 5

检测远程服务器是否离线的最简单方法是尝试连接到它。使用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)