简体   繁体   中英

Detecting if internet is connected in perl

I have this perl script to extract the source code of a webpage:

#!/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";

Now, I want to check the internet status if it is connected or not before extracting the source code .

The simplest way to detect whether a remote server is off line is to attempt to connect to it. Using LWP to send a head request (instead of get ) retrieves just the HTTP header information without any content, and you should get a swift response from any server that is on line

The default timeout of LWP::UserAgent object is three minutes, so you will need to set it to something much shorter for a rapid test

This program temporarily sets the timeout to 0.5 seconds, sends a head request, and reports that the server is not responding if the result is an error of any sort. The original timeout value is restored before carrying on

Depending on the real server that you want to test, you will need to adjust the timeout carefully to avoid getting false negatives

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);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM