У меня есть несколько примеров в моей книге Mojolicious Web Clients , но вот сделка.
Когда вы делаете запрос, вы возвращаете объект транзакции:
my $ua = Mojo::UserAgent->new;
my $tx = $ua->post( ... );
У объекта транзакции есть и запрос, и ответ (главная особенность, которая отличает Mojo от LWP и даже других библиотек пользовательских агентов на других языках). Чтобы получить ответ, вы можете использовать методы res
или result
. result
умрет за вас, если он не смог сделать запрос, потому что произошла ошибка соединения (ENONETWORK):
my $res = $tx->result;
Как только вы получите ответ, вы можете сделать несколько вещей (и это в разделе SYNOPIS Mojo :: UserAgent . Если вы хотите сохранить результат в файл, это просто:
$res->save_to( 'some.json' );
Вы можете превратить содержимое в DOM и извлечь части HTML или XML:
my @links = $res->dom->find( 'a' )->map( attr => 'href' )->each;
Для ответа JSON вы можете извлечь содержимое в Perl структуру данных:
my $data_structure = $res->json;
Однако, если вы хотите получить необработанное JSON (необработанное, незакодированное тело содержимого), то это тело сообщения запроса. Думайте об этом как буквальный, нефильтрованный текст:
use Mojo::JSON qw(decode_json);
my $raw = $res->body;
my $data_strcuture = decode_json( $raw );
, так как это объект ответа , Mojo :: Message и Mojo :: Message :: Response покажет, что вы можете сделать.
Вот полная тестовая программа:
#!perl
use v5.12;
use warnings;
use utf8;
use Mojo::JSON qw(decode_json);
use Mojo::UserAgent;
use Mojo::Util qw(dumper);
my $ua = Mojo::UserAgent->new;
my $tx = $ua->get(
'http://httpbin.org/get',
form => {
name => 'My résumé'
},
);
die "Unsuccessful request"
unless eval { $tx->result->is_success };
my $data_structure = $tx->res->json;
say dumper( $data_structure );
my $raw = $tx->res->body;
say $raw;
my $decoded = decode_json( $raw );
say dumper( $decoded );