Сначала запросить 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 -- Oleg Alistratov -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
