Я не вижу такой возможности, упомянутой в документации HTTP :: Tiny, и не вижу ее упрощенной в исходном коде модуля.Однако вы можете использовать такой модуль, как Test :: MockModule, чтобы ближе познакомиться с тем, что происходит.Вот пример:
#!/usr/bin/env perl
use strict;
use warnings;
use HTTP::Tiny;
use Test::MockModule;
use Data::Dumper;
my $t = HTTP::Tiny->new();
my $mock = Test::MockModule->new('HTTP::Tiny');
$mock->redefine('_request' => sub {
warn "In _request: ", Dumper {self => $_[0], method => $_[1], url => $_[2], args => $_[3]};
return $mock->original('_request')->(@_);
});
print "Response: ", Dumper $t->get('http://localhost:3000');
Итак, в этом фрагменте мы насмехаемся _request
, но метод насмешки, который мы устанавливаем от имени _request
, обращается к оригинальному методу _request
, так что наш насмешливый методМетод становится оберткой вокруг исходного метода, и мы можем выгрузить базовый объект и аргументы, переданные в метод.Я делаю дамп до выполнения запроса, но я мог бы сделать начальный дамп, получить возвращаемое значение реального запроса, а затем снова сбросить объект, если бы подумал, что он может содержать дополнительную полезную информацию.Пока мы возвращаем фактический ответ, вызывающий код не является мудрым.
Вот пример вывода.URL, который я нажимаю, является просто приложением Mojolicious :: Lite по умолчанию.
In _request: $VAR1 = {
'method' => 'GET',
'self' => bless( {
'agent' => 'HTTP-Tiny/0.076',
'no_proxy' => [],
'max_redirect' => 5,
'keep_alive' => 1,
'verify_SSL' => 0,
'timeout' => 60
}, 'HTTP::Tiny' ),
'args' => {},
'url' => 'http://localhost:3000'
};
Response: $VAR1 = {
'headers' => {
'content-length' => '146',
'content-type' => 'text/html;charset=UTF-8',
'server' => 'Mojolicious (Perl)',
'date' => 'Sun, 26 May 2019 03:19:57 GMT'
},
'protocol' => 'HTTP/1.1',
'reason' => 'OK',
'url' => 'http://localhost:3000',
'success' => 1,
'status' => '200',
'content' => '<!DOCTYPE html>
<html>
<head><title>Welcome</title></head>
<body><h1>Welcome to the Mojolicious real-time web framework!</h1>
</body>
</html>
'
};
Прежде чем я смог узнать, что _request
был тем местом, где я хотел нацелить свой макет, мне пришлось взглянуть наИсходный код для HTTP :: Tiny.К счастью, ::Tiny
часть модуля означает, что смотреть не на что.Это на самом деле довольно простой модуль.
Вы можете решить, что для ваших собственных целей имеет смысл представить свою оболочку в каком-то другом месте в HTTP :: Tiny, но перенос _request
кажется довольно хорошим выбором.для большинства случаев.