Как я могу сделать запрос авторизованным с 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 и добавит для вас заголовок авторизации.

Другие вопросы по тегам