2015-09-13 3 views
1

В настоящее время я пытаюсь сделать эту работу:Как я могу сделать запрос, разрешенный с помощью 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 works OK:

curl -v -H "authorization: Bearer the_same_token_as_above" https://spreadsheets.google.com/feeds/spreadsheets/private/full 

Что я делаю неправильно?

ответ

1

Единственное, что я вижу, что вам не хватает, это call to start. Добавление следующие две строки в код блока работает для меня (хотя и с другой URL/лексем):

$tx = $ua->start($tx); 
app->log->info($tx->res->body); 

Если у вас есть много API вызовов, которые должны быть разрешены, то вы можете попробовать подход similar to this, как показано ниже:

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

Смежные вопросы