4

我正在尝试使用官方 Java 示例来熟悉 Google Drive API。但是,在浪费了几个小时并尝试设置样本两次之后,我仍然无法按预期使用它。

它不会显示文件的内容,而是在 FileServlet(/svc 路径)中引发 404 错误。更具体地说,service.files().get(fileId).execute();似乎返回 null。我已经直接从 Google Drive 以及使用 Google File Picker 尝试了不同的文件、不同的 MIME 类型。

我已经尽可能地遵循了https://developers.google.com/drive/examples/java中描述的步骤。

有没有人能够让样本运行?

编辑: 这是请求 URL 时 FileServlet 的日志输出/svc?file_id=0B08R9MrOE-ejZTY2M2I5MjAtYmVjZS00OTkyLWI4ZTEtOTg4OGM3YTIxMWEw(第 78 行抛出 404 错误):

2012-04-26 08:21:36.077
com.google.api.client.http.HttpRequest execute: -------------- REQUEST  --------------
GET https://www.googleapis.com/drive/v1/files/0B08R9MrOE-ejZTY2M2I5MjAtYmVjZS00OTkyLWI4ZTEtOTg4OGM3YTIxMWEw
Accept-Encoding: gzip
User-Agent: Google-HTTP-Java-Client/1.8.3-beta (gzip)

D 2012-04-26 08:21:36.263
com.google.api.client.http.HttpResponse <init>: -------------- RESPONSE --------------
403 OK
content-type: application/json; charset=UTF-8
content-encoding: gzip
date: Thu
date: 26 Apr 2012 06:21:36 GMT
expires: Thu
expires: 26 Apr 2012 06:21:36 GMT
cache-control: private
cache-control: max-age=0
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
content-length: 188
server: GSE
x-google-cache-control: remote-fetch
via: HTTP/1.1 GWA

D 2012-04-26 08:21:36.265
com.google.api.client.http.HttpResponse getContent: Response size: 188 bytes
D 2012-04-26 08:21:36.271
com.google.api.client.http.HttpResponse getContent: {
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit Exceeded. Please sign up",
    "extendedHelp": "https://code.google.com/apis/console"
   }
  ],
  "code": 403,
  "message": "Daily Limit Exceeded. Please sign up"
 }
}

这听起来很像“我不认识你”,所以我再次查看了我的客户端 ID 和客户端密码:我注意到 API 控制台中显示了两个客户端 ID 和客户端密码,一个“Web 应用程序的客户端 ID”和另一个“Drive SDK 的客户端 ID”。我以前用过那个用于 Web 应用程序,所以我尝试切换到用于 Drive SDK 的那个。不幸的是,这并没有改变任何东西。同样的错误...:/

4

4 回答 4

7

根据您的日志,您的 404 错误似乎是由对 Drive API 的请求返回的 403 错误引起的。

来自 Google API 的错误通常在其正文中包含解释。在你的情况下:

"error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit Exceeded. Please sign up",
    "extendedHelp": "https://code.google.com/apis/console"
   }
  ],
  "code": 403,
  "message": "Daily Limit Exceeded. Please sign up"
 }
}

这通常意味着您没有在您的 Google API 控制台项目上启用对 Google Drive API 的访问。为此:

  • 在Google API 控制台中打开您的项目
  • 转到服务部分
  • 通过单击开/关切换启用Drive SDKDrive API
  • 不要忘记在Drive SDK部分配置您的应用,并在 **API Access" 部分配置您的 OAuth 设置

这一切都在我们文档的开始 > 注册应用部分中进行了描述。您还应该确保您阅读了“入门”的其他子部分。

于 2012-04-26T07:57:29.980 回答
1

我最终设法让它工作。我不确定之前的问题是什么,但这里有一些提示给那些面临类似问题的人:

  • “Web 应用程序的客户端 ID”和“Drive SDK 的客户端 ID”让我感到困惑。不幸的是,文档并没有告诉您在哪个地方使用哪一个,但您似乎只需要“Web 应用程序的客户端 ID”。

  • 如果您更新 Chrome 扩展程序或 API 控制台,则 Drive 可能需要一些时间才能识别这些更改。例如,在 API 控制台中更改 OAuth 客户端 ID 可能需要一些时间才能生效,因为每个人都在缓存。如果您正在测试您的应用程序,删除缓存和 cookie 有助于加快该过程。

祝你的申请好运,感谢所有帮助过我的人!

于 2012-05-01T10:17:20.497 回答
1

根据我的经验,“403 Quota Exceeded”总是源于未设置 HTPP 授权标头。

于 2012-09-20T14:31:10.887 回答
1

我将 Google 的 dredit 示例中分发的 java OAuth 代码用于通过“打开方式”流程并同样收到 403 错误的程序。

我不得不深入研究 OAuth 代码才能找到问题所在,关于 403 错误,我还没有在其他地方看到过问题的根源。本质上,CredentialMediator 的 ExchangeCode 方法假定只有一个重定向 uri,这是您希望访问的那个。这对我来说不是这种情况,并导致了 CodeExchangeException。

要解决此问题,您可以按摩 client_secrets 中的 uri 列表,以便您希望重定向到的 uri 是第一个或类似的,但如果此方法可以转到多个 uri 中的任何一个,则需要参数化。

我希望这可以帮助某人根除他们的 403 gremlin。

于 2013-04-24T15:12:24.310 回答