在我们做一些测试, 接口和监控的服务时, 我们常常需要发送 Get 之类的请求, 去取得一些信息. 比如很常见的一个需求. 在监控的时候, 我们需要记录解析时间, header 取得的时间, 首字节的时间. 然后只取前 2M 断开之类, 各种小需求.
在这, 我来演示一下怎么用 Mojo::UserAgent 来实现其中一些需求.
my $ua = Mojo::UserAgent->new; my $tx = $ua->build_tx(GET => 'http://www.php-oa.com'); $tx->res->content->on(body =>sub { my $single = shift; my $length = $single->headers->content_length || 0; my $stat = $tx->client_close; }); $ua->start($tx); Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
象上面这样, 使得原本的 Get 请求, 基本变得象 Head 一样的请求.因为有些服务就不支持 Head . 在这个地方, 也可以用来做首字节, 和 2M 以后立即断开之类来进行速度测试.
因为上面的 content 的写事件会触发 body , 这个 body 的事件是在 header 解析之后, body 取得之前的事件. 所以可以在这做任何事情.
注意这个地方, 还是一样可以使用回调的, $ua->start($tx) , 也可以是 $ua->start($tx, sub {xxoo})