2010-09-22 2 views
4

Я использую WWW :: Механизируйте, чтобы читать определенную веб-страницу в цикле, который запускается каждые несколько секунд. Иногда «GET» истекает, и скрипт перестает работать. Как я могу оправиться от одного такого таймаута, чтобы он продолжал цикл и пробует «GET» в следующий раз?Как я могу оправиться от тайм-аута с помощью Perl WWW :: Mechanize?

ответ

3

Использование eval:

eval { 
    my $resp = $mech->get($url); 
    $resp->is_success or die $resp->status_line; 
    # your code 
}; 

if ([email protected]) { 
    print "Recovered from a GET error\n";  
} 

eval блока будет поймать любую ошибку при Geting страницы.

1

Одним из вариантов было бы реализовать метод обработки ошибок тайм-аута и привязать его к объекту-меху во время построения в качестве обработчика onerror. См. Constructor and Startup в документах.

Можно даже игнорировать ошибки, установив нулевой обработчик ошибок, например:

my $mech = WWW::Mechanize->new(onerror => undef); 

, но я бы не рекомендовал, что - вы просто получите странные проблемы позже.

0

Это решение продолжит попытки загрузить страницу до тех пор, пока она не будет работать.

do { 
    eval { 
     $mech->get($url); 
    }; 
} while ([email protected] ne '');