Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Google Drive服务帐户返回403个usageLimits_Java_Google App Engine_Oauth 2.0_Google Drive Api - Fatal编程技术网

Java Google Drive服务帐户返回403个usageLimits

Java Google Drive服务帐户返回403个usageLimits,java,google-app-engine,oauth-2.0,google-drive-api,Java,Google App Engine,Oauth 2.0,Google Drive Api,我正在尝试编写一个AppEngine应用程序,将Google文档写入Google Drive,放入一组特定的文件夹并设置访问权限。我在使用旧的docslistapi时使用了这个函数,但由于它刚刚被弃用,我决定更新我的代码(而且我还有一些附加函数要添加) 我面临的问题是:当我使用一个服务帐户并试图模拟一个特定的用户时,即使我没有用完任何配额,我也会得到usageLimits的403 以下是我正在使用的代码: GoogleCredential credentials = new GoogleCred

我正在尝试编写一个AppEngine应用程序,将Google文档写入Google Drive,放入一组特定的文件夹并设置访问权限。我在使用旧的docslistapi时使用了这个函数,但由于它刚刚被弃用,我决定更新我的代码(而且我还有一些附加函数要添加)

我面临的问题是:当我使用一个服务帐户并试图模拟一个特定的用户时,即使我没有用完任何配额,我也会得到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 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"
}

我不明白为什么这样不行。我在网上找了一整天,但找不到合适的答案。非常感谢您的帮助。

当API调用缺少授权http头时,我通常会得到403。跟踪http并查看标题。“quota”消息的基本原理是,如果没有Auth头,您是匿名的,匿名使用的配额为零

您还可以检查您的应用程序是否已为这两个驱动器API注册,因为我听说这可能会导致相同的问题


关于内部方法问题,这听起来像是在使用不兼容的库版本。对我来说,最有效的方法是删除我用示例代码下载的所有库,然后使用Google Eclipse插件“Google/Add Google API…”下载所有最新版本。

因此pinoyyid的答案确实有用,尽管它不是最终的答案

我最终是这样解决的:

我把我的AppID(xxxxx.apps.googleusercontent.com)添加到我的CPanel中https://www.google.com/a/cpanel/[[YOURDOMAIN]]/ManageOauthClients 在这些范围内:


之后,我可以向驱动器环境发出经过身份验证的请求。现在遇到了一堆不同的问题,但403问题解决了。

可能重复:我检查过了。。。这是一个客户端应用程序。我对服务器端的服务帐户有问题。但是再一次通过这些点。。。谁知道呢,它可能会起作用。我删除了所有其他lib,并通过eclipse插件添加了它。我最初的想法是一样的:一定是旧的libs。但不幸的是没有。我查看了标题位,但被卡住了,因为要将标题设置为包含承载者,我需要令牌,但由于使用服务帐户,我没有可用的令牌(或者这是我错的地方吗?)。好的。。。我今天一直在疯狂地调试,发现没有令牌集。所以请求中没有带胡子的标记。现在我需要弄清楚的是如何从我的服务帐户中获取令牌。@pin0yyid如何设置头?我对新的api
https://stackoverflow.com/questions/60704698/how-to-create-google-sheets-using-service-account-credential-in-python
我也有同样的问题,但我没有谷歌应用程序。我只有一个foo.appspot.com域名。有什么帮助吗?你在为GMail开发这个吗?因为我不认为GMail有服务账户这回事。如果你能提供更多的信息,我也许能帮上忙,而不是Gmail。我只需要使用驱动器API。我正在使用
https://www.googleapis.com/drive/v2/files
API。我在这里发布了一个问题,如果您愿意帮助我,我将不胜感激: