2015-09-13 57 views
1

我目前正在努力使這項工作:如何使用Mojo :: UserAgent向Oauth授權請求?

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 -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... 

這種技術的優點是,每次使用UserAgent實例的get方法時,它會觸發啓動事件偵聽器,並添加授權頭爲您服務。