我很难过。我正在尝试手动获取刷新令牌以使用Perl在Mirror API上为我加载访问令牌,并且它一直给我凭据错误。当我在PHP示例代码中加载确切的HTTP请求时(我打印出要比较的HTTP),同样的refresh_token工作正常。
这是我的Perl HTTP请求:
* POST https://accounts.google.com/o/oauth2/token 主持人:accounts.google.com 用户代理:libwww-perl / 6.02 内容长度:175 内容类型:application / x-www-form-urlencoded CLIENT_ID = client_id_goes_here&安培; client_secret = client_secret_goes_here&安培; refresh_token = refresh_token_goes_here&安培; grant_type = refresh_token *
这是同一个refresh_token上的PHP:
* POST / o / oauth2 / token HTTP / 1.1 content-type:application / x-www-form-urlencoded 内容长度:175 CLIENT_ID = client_id_goes_here&安培; client_secret = client_secret_goes_here&安培; refresh_token = refresh_token_goes_here&安培; grant_type = refresh_token *
我的Perl看起来像这样:
my $auth_response = $ua->request(POST 'https://accounts.google.com/o/oauth2/token',
'Host' => 'accounts.google.com',
'Content_Type' => 'application/x-www-form-urlencoded',
'Content' => [
'client_id' => $client_id,
'client_secret' => $client_secret,
'refresh_token' => $credentials->{'refresh_token'},
'grant_type' => 'refresh_token',
],
);
HELP! : - )
答案 0 :(得分:1)
看起来你正在使用LWP。我讨价还价this quick example,它使用LWP与Google一起跳舞OAuth 2.0舞蹈,从开始到令牌刷新。
根据我的实验,到目前为止您显示的代码看起来是正确的。这是我用来刷新访问令牌的确切代码:
my $auth_response = $ua->request(POST 'https://accounts.google.com/o/oauth2/token',
'Host' => 'accounts.google.com',
'Content_Type' => 'application/x-www-form-urlencoded',
'Content' => [
'client_id' => $client_id,
'client_secret' => $client_secret,
'refresh_token' => $refresh_token,
'grant_type' => 'refresh_token',
],
);
如果您仍在观察错误,请尝试克隆该repo,填充您的client_id和client_secret,并查看问题是否仍然存在。如果是,请分享print Dumper($auth_response);
的结果,这将提供大量有用的信息。
此外,Perl不是Google官方支持的语言,但看起来社区已经出现:有一个开源Perl client library。我以前从未使用它,但你可能想看看它。