Добрый день Олег!

Oleg Alistratov <[email protected]> писал(а) в своём письме Mon, 28 Oct 2013 14:53:01 +0200:

Сначала запросить HEAD, у хорошего сервера там уже все будет.
Для нехорошего затем можно сделать GET, указав

  Range: bytes=0-20479

(это если первых 20 Кб достаточно).

Совсем нехороший сервер и Range проигнорирует (а для динамически генерируемых данных он почти никогда не поддерживается). На этот случай у LWP::UserAgent->get есть параметр :content_cb, туда передается колбэк, который будет вызываться на каждый скачанный чанк данных.
Если принимать данные уже не хочется, то в колбэке можно просто умереть.
В доке по LWP::UserAgent все написано.

Премного благодарен.
:)
Попробую разобраться в теории и перейти к практике.

27.10.2013, 09:44, "Alessandro Gorohovski" <[email protected]>:
Mons Anderson <[email protected]> писал(а) в своём письме Sun, 27 Oct 2013
01:30:14 +0300:

On 26.10.2013, at 23:58, Alessandro Gorohovski <[email protected]>
 wrote:
 Уважаемое сообщество,
 Добрый вечер!

 Подскажите,
 можно ли надежно и как определить размер (объем)
 предполагаемого к скачиванию контента
 (например, html-страницы) без загрузки всей страницы.

 Я сейчас пользуюсь

 my $agent = LWP::UserAgent->new;

 my $request = HTTP::Request->new( GET => $url );
 $request->header('Accept' => 'text/html');

 my $response = $agent->request( $request );
 В этом месте вы уже получили весь ответ целиком.

Согласен.

 $response->is_success || print FILE_ERR "$id\t$url:\t",
 $response->message, "\n";

 И далее парсим
 $response->headers_as_string

 на предмет 'Content-Length'

 Но, к сожалению удручает то, что не всегда заголовок скачиваемой
 страницы
 содержит поле  'Content-Length'
 :(
Если content-length нет, то значит там ответ transfer-encoding: chunked.
 а это, в свою очередь, означает, то вы не можете заранее узнать какой
 длины будет ответ, пока не считаете его целиком.

Печально.
А может существует способ при котором можно было бы управлять количество
байт скачиваемого контента, например, загрузив не более 20 kb, прекращать
прием данных
(разорвать соединение принудительно)
?

--
ANG
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org



--
ANG
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить