我正在尝试编写一个AppEngine应用程序,它可以将谷歌文档写入Google Drive,将其放入一组特定的文件夹中,并设置访问权限。我可以使用旧的DocsList应用程序接口,但是因为它刚刚被弃用,所以我决定更新我的代码(而且我还有一些额外的函数要添加)。
我面临的问题是:当我使用一个服务帐户并试图模拟一个特定的用户时,即使我没有用完我的配额,我也得到了usageLimits的403。
下面是我使用的代码:
GoogleCredential credentials = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("xxxxxxxxxxgserviceaccount.com")
.setServiceAccountScopes(DriveScopes.DRIVE)
.setServiceAccountPrivateKeyFromP12File(
new java.io.File("xxxx-privatekey.p12"))
.setServiceAccountUser("user@xxxxxx.org").build();
然后使用这些凭据启动我的Drive对象:
Drive d = Drive.builder(httpTransport, jsonFactory)
.setHttpRequestInitializer(credentials)
.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
@Override
public void initialize(JsonHttpRequest request) {
DriveRequest driveRequest = (DriveRequest) request;
driveRequest.setPrettyPrint(true);
}
}).setApplicationName("MYAPPNAME").build();
顺便说一句:我试过使用新的驱动器(....)但是,无论我怎么尝试,这都不会起作用。不断抛出找不到内部方法的错误!
回到这个问题:当我使用'd‘调用像.files().get("SOMEFILEID").execute()这样的东西时,我得到了一个403
{ "code" : 403,
"errors" : [ {
"domain" : "usageLimits",
"message" : "Daily Limit Exceeded. Please sign up",
"reason" : "dailyLimitExceededUnreg",
"extendedHelp" : "https://code.google.com/apis/console"
} ],
"message" : "Daily Limit Exceeded. Please sign up"
}
我不明白为什么这个不起作用。我在网上找了一整天,但找不到合适的答案。一些帮助是非常感谢的。
发布于 2012-09-20 01:42:34
当API调用缺少Authorization http头时,我通常会得到403。跟踪http并查看报头。" quota“消息的基本原理是,如果没有Auth头,您就是匿名的,并且匿名使用的配额为零。
你也可以检查你的应用程序是否注册了这两个驱动器app,因为我听说这可能会导致相同的问题。
在内部方法问题上,这听起来像是在使用不兼容的库版本。对我来说,最有效的方法是删除所有与示例代码一起下载的库,然后使用Google Eclipse插件" Google /Add Google APIs...“下载所有最新版本。
发布于 2012-09-21 07:46:49
所以pinoyyid的答案确实有帮助,尽管它不是最终的答案。
我最终像这样解决了它:
我使用以下作用域将我的AppID (xxxxx.apps.googleusercontent.com)添加到我的CPanel https://www.google.com/a/cpanel/[[YOURDOMAIN]]/ManageOauthClients中:
在那之后,我可以向Drive环境发出一个经过身份验证的请求。现在遇到了一堆不同的问题,但403已经解决了。
https://stackoverflow.com/questions/12503437
复制