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


Автор: djusha 22.2.2011, 21:29

Код

$content = unpack("x68 A500",$response->content); 


пропускает 68 символов и берет 500 символов

Код

$ua = LWP::UserAgent->new;
$ua->agent("Mozilla/4.0"); # pretend we are very capable browser
$ua->timeout(145);
$response = $ua->get( "http://www.lalalalala.com"); 
$content = unpack("x68 A500",$response->content); # x68 A500 - пропустить 68 символов, прочитать 500



не могу догнать.... если мы скачиваем страницу таким образом: $content = unpack("x68 A500",$response->content), то все равно скачивается вся страница келиком, или только кусок x68 A500?

были мысли ускорить процесс скачивания, потому что нужное место находится в пределах x68 A500... или это все от лукавого, и качается вся страница по любому, а только кусок попадает в $content?

Автор: Jimy 22.2.2011, 23:02
Цитата

Код

$content = unpack("x68 A500",$response->content);


Это что за магия? Может попробовать "дедовским" методом:
Код

$content = substr($response->content, 68, 500);

Автор: Jimy 22.2.2011, 23:22
По существу вопроса.
unpack не скачивает ничего. На момент его вызова, ответ от сервера (разумеется, вместе с полным содержимым страницы) уже содержится в $response.

Автор: djusha 23.2.2011, 07:13
1. гдето читал, unpack работает быстрее чем substr
2. спасибо. 


Автор: Pfailed 23.2.2011, 08:47
В HTTP есть для этого специальное средство, кажется это называется byte ranges. Но на большинстве серверов это работает только на отдачу статических файлов, с динамически генерируемыми страницами работать не будет.
В LWP это можно сделать так
Код

$ua->get($url, Range => 'bytes=500-')

Автор: djusha 23.2.2011, 19:47
Цитата(Pfailed @ 23.2.2011,  08:47)
В HTTP есть для этого специальное средство, кажется это называется byte ranges. Но на большинстве серверов это работает только на отдачу статических файлов, с динамически генерируемыми страницами работать не будет.
В LWP это можно сделать так
Код

$ua->get($url, Range => 'bytes=500-')

Хммм... в доке по ЛВП не нашел этого... пороюсь в коде модуля...

Спасибо!

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