【问题标题】:Google Drive API failing - Unusual traffic from your computer networkGoogle Drive API 失败 - 来自您的计算机网络的异常流量
【发布时间】:2020-02-07 03:53:01
【问题描述】:

Google Drive API GET 查询开始失败(我们在我们的一个客户端服务中使用这个 api):

https://www.googleapis.com/drive/v3/files/1ke4Yoxxxxxxxxxxxxxx?alt=media&access_token=ya29.ImG9BwT.....

我们很抱歉... ...但您的计算机或网络可能正在发送自动查询。为了保护我们的用户,我们现在无法处理您的请求。 有关详细信息,请参阅 Google 帮助... “来自您的计算机网络的异常流量”

到今天为止一切都很好。

刚刚用 curl 做了几个测试:

  1. 在 HTTP 标头中带有 access_token 的 HTTP GET: curl -H "授权:承载 ya29._valid_access_token" https://www.googleapis.com/drive/v3/files/1r5BT2WPrulQ6FyhT8RcqV51TVOThEmhK?alt=media

结果:成功,文件下载。

  1. 带有 access_token 的 HTTP GET 作为 HTTP 请求的一部分: 卷曲https://www.googleapis.com/drive/v3/files/1r5BT2WPrulQ6FyhT8RcqV51TVOThEmhK?alt=media&access_token=ya29._valid_access_token

结果:错误

    {
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued       use requires signup.",
    "extendedHelp": "https://code.google.com/apis/console"
   }
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
 }
} 

请注意,Google API 项目已获得 Google 批准并处于 Production 状态!!!

您好 Google 团队,您知道为什么会发生这种情况吗?

谢谢

【问题讨论】:

  • 我认为您的问题的原因是由于this。很遗憾,access_token 的查询参数无法使用。所以请使用请求头的访问令牌而不是查询参数。
  • 是的,就是这样。
  • 是的,就是这样。不幸的是,Google 没有更新这些文档:developers.google.com/drive/api/v3/query-parameters 您可以通过以下两种方式之一为任何请求提供 OAuth 2.0 令牌: 1. 使用 access_token 查询参数,如下所示:?access_token=oauth2-token 2. 使用 HTTP像这样的授权标头: Authorization: Bearer oauth2-token
  • 我投票决定将此问题作为题外话结束,因为它显然是 Google 支持的问题。
  • 我在使用 googleapis 时遇到了类似的问题,当我将包从 39 更新到 48 时,问题解决了。

标签: google-drive-api


【解决方案1】:

仅出于文档目的发布此内容。根据reference provided by Tanaike,自 2020 年 1 月 1 日起:

将不再支持对使用查询参数中的访问令牌进行身份验证的 files.get、revisions.get 和 files.export 端点的下载调用将不再受支持

只有下载媒体内容的请求 (alt=media) 会受到此更改的影响。

应在 HTTP 标头中提供访问令牌,例如 Authorization: Bearer oauth2-token,或者,如果不可能,请遵循参考文档中提供的解决方法:

对于文件下载,重定向到 webContentLink,它将指示浏览器下载内容。如果应用程序想要向用户显示文件,他们可以简单地重定向到 v2 中的 alternateLink 或 v3 中的 webViewLink。

对于文件导出,使用所需的 mime 类型重定向到 exportLinks 中的导出链接,这将指示浏览器下载内容。

参考:

【讨论】:

    【解决方案2】:

    iamblichus 的文档中发布针对 Google Drive 中应用程序数据的补充内容。

    我的应用在后端使用 Google Drive API 将我的用户的文档存储在他们自己的 Drive 上。重要的是,我将数据存储在 application data folder 中,这样用户就不会意外删除数据。

    为了让用户检索他们的文档,我习惯将用户重定向到 downloadUrl: https://www.googleapis.com/drive/v2/files/id?alt=media&source=downloadUrl&access_token=ya29.** 我在查询中添加了 alt=mediaaccess_token。直到 2020 年 1 月 1 日,这一切都很好。如上所述。但是,现在请求失败并显示以下消息:

    很抱歉... ...但您的计算机或网络可能正在发送 自动查询。为了保护我们的用户,我们无法处理您的请求 现在。

    GET request downloadUrl failing

    为了解决这个问题,我尝试了 Google 提供的 workarrounds,但根据我的经验,它们处理 application data folder 中的文档。

    我在 v2 中尝试了 webContentLinkaccess_token 查询,但它失败并出现 401 Unauthorized 错误。

    v2 中的 alternateLink 和 v3 中的 webViewLink 失败并出现错误:

    所需文件不存在。

    我不能使用exportLinks,因为它仅适用于 Google 文档。

    我找到的解决方案是首先使用 Google Drive PHP SDK 将文件下载到服务器,然后使用 Content-Dispostion 标头将其提供给我的用户。如描述here。在我看来,它没有那么优雅,因为最终用户不会直接从 Google Drive API 下载文档,但它可以工作。

    很遗憾 Google 没有更新他们的文档也没有通知他们的用户。

    【讨论】:

    • 如果您要发布对答案的编辑,您应该使用编辑功能。 iamblichus 的答案是一个社区 wiki,因此请随时使用更多信息对其进行编辑。
    • @ZektorH 你需要 100 声望才能编辑社区 wiki 帖子。
    • 那真是太可惜了。你们知道其他可以轻松下载的存储服务吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2012-04-06
    • 2010-10-03
    • 1970-01-01
    相关资源
    最近更新 更多