我的网站问题是使用谷歌驱动器API只会影响我们在其上测试的测试服务器,但不会影响我测试它的localhost。你可以想象这使得很难排除故障。在程序运行后写入文本文件后,我设法找到导致问题的确切语句:
...
jvmtiLocalVariableEntry *entTab = NULL;
jint entCnt = 0;
jvmtiError errNum = jvmti->GetLocalVariableTable(mthID, &entCnt, &entTab);
...
这让我相信错误与权限/授权有关。我的本地主机和测试站点权限在google api控制台上是完全相同的,这是我从中获取客户机密的地方。
https://i.imgur.com/fJDAWWz.png
44354以上是我的本地主机,黑屏的http(不是https)网址是我们的测试服务器。 正如你所看到的那样,起源和重定向uris是完全相同的,所以我无法弄清楚为什么它会在一个而不是另一个上工作。
这是语句流来自:
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
null).Result;
编辑:我刚刚意识到测试服务器实际上是http地址,而不是https地址。这可能是为什么?谷歌API调用不适用于http?
答案 0 :(得分:0)
我最终通过大量的反复试验弄明白了。
我不得不添加这段代码:
GoogleClientSecrets cs = GoogleClientSecrets.Load(stream);
flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = new ClientSecrets
{
ClientId = cs.Secrets.ClientId,
ClientSecret = cs.Secrets.ClientSecret
},
Scopes = Scopes,
});
然后获得一个令牌。为了获得令牌,我按照OAuth Playground下的说明操作:https://developers.google.com/adwords/api/docs/guides/authentication
然后使用那里的信息来做到这一点:
TokenResponse token = new TokenResponse
{
RefreshToken = "refreshtokenhere",
TokenType = "Bearer",
ExpiresInSeconds = 3600
};
(我不认为tokentype或expire是重要的,但无论如何我都包括它们)
最后:
credential = new UserCredential(flow, "me", token);
然后以与以前相同的方式使用此凭证。