Perl - статьи
ba2f5a3f

Получение больших документов


Когда Вы запрашиваете большой(или потенциально большой) документ, возникает проблема со стандартными действиями с методами запросов (подобно $response = $browser->get($url)) с тем, что весь объект ответа должен храниться в памяти. Если ответом является 30-мегабайтный файл, то это, мягко говоря, не очень хорошо для Вашей оперативной памяти и размером Вашего процесса в ней.

Хорошей альтернативой является сохранение файла на диск, а не в память. Синтаксис следующий:

$response = $ua->get($url, ':content_file' => $filespec, );

Например,

$response = $ua->get('http://search.cpan.org/', ':content_file' => '/tmp/sco.html' );

Когда Вы используете опцию:content_file, объект $response будет иметь все нормальные заголовки, однако $response->content

будет пустым.

Отмечу, что опция ":content_file" не поддерживалась старыми версиями LWP, поэтому Вы должны принять это во внимание, добавив use LWP 5.66;для проверки версии LWP, если Вы считаете, что Ваша программа может быть запущена на системах с более старыми версиями LWP.

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

use HTTP::Request::Common; $response = $ua->request( GET($url), $filespec );



Содержание раздела