Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Импорт данных из txt и отображение работы сайтов


Автор: vlastelin 9.4.2012, 15:44
Добрый день, пришлось столкнуться с perl, хоть на нём никогда ничего не программировал..
У меня есть файлик 1.txt, в нём есть ip адреса сайтов, причём они не сразу написаны, а:

"текст 2-буквы 1-буква ip-адрес"
т.е. сначала идёт какоето слово, потом 2 буквы, потом через пробел ещё буква и наконец ip адрес домена
и этот ip адрес нужно проверить на работоспособность и вывести "Работает" или "Не работает"

и таких строчек много, они постоянно добавляются и удаляются из этого txt файла..

Как хоть примерно это можно сделать..? Что почитать..?

Я реализовал подобное на php, но нужно на perl.. :(

Автор: arto 9.4.2012, 16:33
что такое "работоспособность"?

Автор: vlastelin 9.4.2012, 17:15
Ну доступен сайт или сайт лежит и не работает.

И мне это всё выводить на сайте..

Автор: Pfailed 9.4.2012, 17:51
А на php как реализовали?

Автор: vlastelin 9.4.2012, 17:58
Код


<?php
set_time_limit(0); 
$context = stream_context_create( 
        array( 
            'http' => array( 
                'timeout' => 3,  
                'method' => 'HEAD',  
                'header' => 'User-Agent:Opera/9.80 (Windows NT 6.1; WOW64; U; '. 
                ' '. 
                '/11.62' 
                ) 
            ) 
); 
$urls = array_map('trim', file('filename.txt')); 

foreach($urls as $url){ 
    $check = false; 
    @file_get_contents($url, false, $context); 
    if(!empty($http_response_header)){ 
        foreach ($http_response_header as $header){ 
            if(preg_match('#^HTTP/\d\.\d\s+2\d\d#', $header)){ 
                $check = true; 
                break; 
            } 
        } 
         
    } 


    unset($http_response_header); 

    echo $url.( $check ? 'Доступен' : 'Не доступен');
}
?>




Но тут код писался когда просто идёт:
http://ya.ru
http://r0.ru

и т.д..
А сейчас у меня чуть иной txt файл

Автор: Pfailed 9.4.2012, 18:15
В perl для HEAD запросов можно использовать LWP. Т.е. вместо file_get_contents() и всего что к нему относится будет что-то вроде
Код

use LWP::Simple;

if (head("http://google.ru")) {
    # работает
}

Документация: https://metacpan.org/module/LWP::Simple https://metacpan.org/module/LWP::UserAgent
Остальное тривиально

Автор: arto 9.4.2012, 18:21
perl -MLWP::Simple -lne 'my $url = ( split "\\s+" )[3]; print "$url: ",head("http://$url") ? "yes" : "no"'

Автор: vlastelin 12.4.2012, 11:11
Спасибо большое!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)