11.12.2015, 14:31, "Павел Купцов" <[email protected]>:
> Коллеги, вот вопрос по теме рассылки есть, т.е. по perl :)
>
> Кто пользует у себя сабж - в частности его метод http_get,
> как решаете вопрос с ограничением размера ответа сервера?
> А то у меня попадаются в запросах сайты которые бесконечно отдают text/html,
> в итоге скрипт не заканчивается по таймауту, а все это дело принимает в
> память, что ведет к ее исчерпанию.
«Бесконечно» — это как именно бесконечно? В заголовках ответа есть
Content-Length? Есть, но не соответствует правде? Или нет? Или нет, но внезапно
есть Upgrade: WebSocket? ;)
Если там нормальный документ, просто слишком большой, чтобы его принимать,
достаточно повесить обработчик на on_header и возвращать из него 0, если что-то
не устраивает:
http_get $url,
on_header => sub {
my ($headers) = @_;
return ($headers->{'content-length'} > 16384) ? 0 : 1;
},
sub { ... }
> Вот на сейчас у меня примерно так:
> http_get $url,
>
> headers => {
> 'user-agent' => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36
> (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
> },
>
> on_header => sub {
> $_[0]{"content-type"} =~ /^text\/html\s*(?:;|$)/
> },
>
> timeout => 20,
>
> sub {
> my ( $body, $hdr ) = @_;
>
> if ( $hdr->{Status} =~ /^2/ ) {
> say "OK";
> }
> else {
> say "Error: $hdr->{Status}";
> }
>
> Пока только вижу вариант с установкой обработчика на on_body - но не нашел
> живых примеров. Если подкините немного - мои бесконечные благодарности :)))
>
> --
> Павел
--
Oleg Alistratov
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org