[Moscow.pm] Content-Length of Webpage

Alessandro Gorohovski an.gorohovski на gmail.com
Пн Окт 28 08:16:21 PDT 2013


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

Oleg Alistratov <ali на ali.org.ua> писал(а) в своём письме 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" <an.gorohovski на gmail.com>:
>> Mons Anderson <mons на cpan.org> писал(а) в своём письме Sun, 27 Oct 2013
>> 01:30:14 +0300:
>>
>>>  On 26.10.2013, at 23:58, Alessandro Gorohovski  
>>> <an.gorohovski на gmail.com>
>>>  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
>> moscow-pm на pm.org | http://moscow.pm.org
>


-- 
ANG


Подробная информация о списке рассылки Moscow-pm