Как я могу сделать запрос авторизованным с Oauth с Mojo::UserAgent?
В настоящее время я пытаюсь сделать эту работу:
my $ua = Mojo::UserAgent->new;
my $req = Mojo::Message::Request->new;
my $tx = $ua->build_tx(GET => 'https://spreadsheets.google.com/feeds/spreadsheets/private/full');
app->log->info($c->session('token'));
$tx->req->headers->authorization('Bearer ' . $c->session('token'));
где $c->session('token')
это токен, который я получил через Mojolicious:: Plugin:: OAuth2.
Я получаю только пустой ответ. Делать то же самое (я думаю) через curl работает нормально:
curl -v -H "authorization: Bearer the_same_token_as_above" https://spreadsheets.google.com/feeds/spreadsheets/private/full
Что я делаю неправильно?
1 ответ
Решение
Единственное, что я вижу, что ты скучаешь, это звонокstart
, Добавление следующих двух строк в ваш блок кода работает для меня (хотя и с другим URL / токеном):
$tx = $ua->start($tx);
app->log->info($tx->res->body);
Если у вас много вызовов API, которые необходимо авторизовать, вы можете попробовать подход, аналогичный приведенному ниже:
my $ua = Mojo::UserAgent->new;
$ua->on(start => sub {
my ($ua, $tx) = @_;
$tx->req->headers->authorization('Bearer <your token here>');
});
my $tx = $ua->get('<your first url here>');
app->log->info("Response body:", $tx->res->body);
my $tx = $ua->get('<your second url here>');
app->log->info("Response body:", $tx->res->body);
# etc...
Преимущество этого метода в том, что каждый раз, когда вы используете get
метод этого UserAgent
Например, он запустит прослушиватель события start и добавит для вас заголовок авторизации.