Получить текстовый / потоковый веб-ответ с помощью WWW::Mechanize или LWP::UserAgent
Я использую WWW::Mechanize
получить веб-страницу, содержащую виджет Google Maps, который получает постоянные данные из одного ответа типа text / event-stream.
Такой ответ напоминает бесконечный ответ от сервера, который постоянно возвращает обновленные данные для работы виджета.
Я пытаюсь выяснить, как прочитать этот точный ответ от Perl. Используя что-то вроде:
my $mech = WWW::Mechanize->new;
# Do some normal GET and POST requests to authenticate and set cookies for the session
# Now try to get that text/event-stream response
$mech->get('https://some.domain.com/event_stream_page');
Но это не работает, потому что ответ никогда не заканчивается.
Как я могу сделать этот запрос и начать читать ответ и что-то делать с этими данными каждый раз, когда сервер обновляет поток?
1 ответ
Решение
Нашел способ сделать это. Использование обработчика из LWP, от которого наследуется WWW::Mechanize:
$mech->add_handler (
'response_data',
sub {
my ($response, $ua, $h, $data) = @_;
# Your chunk of response is now in $data, do what you need
# If you plan on reading an infinite stream, it's a good idea to clean the response so it doesn't grow infinitely too!
$response->content(undef);
# Important to return a true value if you want to keep reading the response!
return 1;
},
);