Perl 使用WWW::Mechanize或LWP::UserAgent获取文本/事件流web响应

Perl 使用WWW::Mechanize或LWP::UserAgent获取文本/事件流web响应,perl,www-mechanize,lwp-useragent,event-stream,Perl,Www Mechanize,Lwp Useragent,Event Stream,我正在使用获取一个网页,其中包含一个GoogleMaps小部件,该小部件从一个文本/事件流类型的响应接收常量数据 这种响应类似于来自服务器的永无止境的响应,它不断返回更新的数据以使小部件工作 我试图找出如何从Perl中读取准确的响应。使用类似于: my $mech = WWW::Mechanize->new; # Do some normal GET and POST requests to authenticate and set cookies for the session #

我正在使用获取一个网页,其中包含一个GoogleMaps小部件,该小部件从一个文本/事件流类型的响应接收常量数据

这种响应类似于来自服务器的永无止境的响应,它不断返回更新的数据以使小部件工作

我试图找出如何从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');
但这不起作用,因为回应永远不会结束


每次服务器更新流时,我如何发出请求并开始读取响应,以及如何处理这些数据?

找到了一种方法。使用,从中继承:

$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;
    },
);

你的目标网站似乎是私有的。你能找到一个公共网站,你可以用它来重现问题,这样我们就可以尝试了吗?我同意您使用handler的方法是正确的,但如果没有工作端点,我无法进行调试。@simbabque,那是一个完全虚假的域。@oldtechaa domain.com不是虚假的,它确实存在。但是OP用它(错误地)掩盖了他们真正的领域。人们通常会在他们的东西在私人网络中时这样做,或者他们不想透露,因为这是一项花费$work的工作。这就是为什么我要求提供一个具有相同行为且可公开访问的示例。给出一个明显错误(而非错误)的示例域的正确方法是。一个完美的例子,说明为什么要发布自己的答案——这对我来说很有用@zdim完全正确!:-)