2016-05-02 3 views
0

У меня есть этот PERL скрипт для извлечения исходного кода веб-страницы:Detecting, если интернет подключен в 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"; 

Теперь я хочу, чтобы проверить состояние интернет, если он подключен или нет перед извлечением источника код.

+1

Не могли бы вы название операционной системы или Linux Распространение, которое вы используете? «Элегантные» методы AFAIK в основном «не переносятся». – AnFi

+0

Google не любит автоматически сканироваться, поэтому вы не можете получать полезные результаты, если только google.com не является местом для реального домена. – Sebastian

+0

* «проверьте статус в Интернете» * Вы хотите проверить, подключена ли ваша собственная система интернет-подключения, или находится ли он в сети или что-то еще? – Borodin

ответ

4

Самый простой способ определить, удален ли удаленный сервер, попытаться подключиться к нему. Использование LWP отправить head запрос (вместо get) получает только информацию заголовка HTTP без содержания, и вы должны получить быстрый ответ от любого сервера, который находится на линии

по умолчанию таймаут LWP::UserAgent объекта по три минуты, поэтому для быстрого теста вам нужно будет установить что-то гораздо более короткое

Эта программа временно устанавливает тайм-аут на 0,5 секунды, отправляет запрос главы и сообщает, что сервер не отвечает, если результатом является ошибка любого Сортировать. Исходное значение тайм-аута восстанавливается до проведения на

В зависимости от реального сервера, который вы хотите проверить, вам необходимо тщательно настроить тайм-аут, чтобы избежать ложных негативов

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); 
} 
Смежные вопросы