[Moscow.pm] Content-Length of Webpage

Oleg Alistratov ali на ali.org.ua
Пн Окт 28 05:53:01 PDT 2013


Сначала запросить 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

-- 
Oleg Alistratov


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