Получить текстовый / потоковый веб-ответ с помощью 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;
    },
);
Другие вопросы по тегам