2

我目前正在尝试使这项工作:

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

我究竟做错了什么?

4

1 回答 1

4

我看到您唯一缺少的是start. 将以下两行添加到您的代码块中对我有用(尽管使用不同的 url/token):

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

如果您有很多 API 调用需要授权,那么您可能想尝试类似于 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,它都会触发启动事件侦听器并为您添加授权标头。

于 2015-12-09T01:19:52.157 回答