Приветствую. Понадобилось решить такую задачу - есть покупные прокси, резидентские, приобретены для парсинга. Так как там лимит по трафу, при превышении, плати еще, мною принято гениальное при свой простоте решение - не грузить страницы весом более (в моем случае, 150 Кб)... Так вот, в LWP есть фишка, вроде max_size(), которая казалось бы должна помочь, зачем голову то напрягать, раз умные дяди разрабы либы уже подумали за нас.
Но, как это обычно бывает, не все так просто!!! При указании лимита, страница ГРУЗИТСЯ ровно на этот лимит, а потом серверу шлется "Client Connect Aborted" и соединение закрывается. Если проще, например, указал я лимит в 150Кб, а страница весит 300Кб. Эта опция загрузит 150Кб, а потом разорвет коннект. Может так оно и надо, а разраб либы лучше меня знает, только это решение мне не подходит. Траф все-равно израсходуется, а кусок страницы мне не нужен.
Почесав репу и посмотрев доки, было принято решение придумать что-то свое. Порассуждав логически, я пришел к выводу, что можно "навесив" соотв. обработчик, получить через заголовок Content-Length размер страницы, если он больше лимита, то ничего не грузить.
Вот такой вот говнокод спас ситуацию:
$ua->add_handler(response_header => sub {
my ($response, $ua) = @_;
die if $response->header('content-length') > 150000;
}, m_code => [200]);;
Все работает нормально, однако, есть нехорошие сервера, вроде mail.ru, где LWP не видит заголовок Content-Length, хотя, он там есть.
Собственно, непонятно, кто виноват и что делать? То ли это я где накосячил, то ли LWP спотыкается на заголовках, ибо у того же mail.ru реальная дичь там творится, заголовков много и данных в них...