Google Drive API - 很抱歉......但您的计算机或网络可能正在发送自动查询

Posted

技术标签:

【中文标题】Google Drive API - 很抱歉......但您的计算机或网络可能正在发送自动查询【英文标题】:Google Drive API - We're sorry...... but your computer or network may be sending automated queries 【发布时间】:2020-06-02 16:00:14 【问题描述】:

我们有一个 Google Drive Oauth2 应用集成。我们正在使用 Google Drive API 导出和获取端点,以便从客户的 Google Drive 文件夹中读取数据。 我们的应用由 Google Oauth 验证团队发布,但我们无法读取不是(csv、xls、xlsx)Google Docs 文件的文件。

这是一个 API 请求示例: 网址:

"https://www.googleapis.com/drive/v3/files/1874uz4MTNer4IszgWG_3pH6VEH2AWJPd?alt=media&access_token=ACCESS_TOKEN"

回复:

"<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"/><title>Sorry...</title><style> body  font-family: verdana, arial, sans-serif; background-color: #fff; color: #000; </style></head><body><div><table><tr><td><b><font face=sans-serif size=10><font color=#4285f4>G</font><font color=#ea4335>o</font><font color=#fbbc05>o</font><font color=#4285f4>g</font><font color=#34a853>l</font><font color=#ea4335>e</font></font></b></td><td style=\"text-align: left; vertical-align: bottom; padding-bottom: 15px; width: 50%\"><div style=\"border-bottom: 1px solid #dfdfdf;\">Sorry...</div></td></tr></table></div><div style=\"margin-left: 4em;\"><h1>We're sorry...</h1><p>... but your computer or network may be sending automated queries. To protect our users, we can't process your request right now.</p></div><div style=\"margin-left: 4em;\">See <a href=\"https://support.google.com/websearch/answer/86640\">Google Help</a> for more information.<br/><br/></div><div style=\"text-align: center; border-top: 1px solid #dfdfdf;\"><a href=\"https://www.google.com\">Google Home</a></div></body></html>"

在 2020 年 2 月 7 日之前,此类请求都可以正常工作。

使用导出 Google Doc 文件的导出端点,工作正常。

在第一时间,我们发现这个链接描述了一些变化:https://support.google.com/cloud/answer/9110914 我们申请了 Oauth 验证,我们通过了,但我们仍然看到同样的问题,即使我们重做 Oauth2 身份验证流程,生成新的访问/刷新令牌。 我们已经尝试在 Issue Tracker 和 Oauth Team 上就此事与 Google 联系,但都无济于事。 我们在生产服务器上没有任何类型的恶意软件、*** 或任何我们可以在一些相关问题中找到的东西。

有人对如何解决这个问题有任何建议吗?

谢谢。

【问题讨论】:

【参考方案1】:

我们设法让它再次工作。我们发现了这个:https://cloud.google.com/blog/products/application-development/upcoming-changes-to-the-google-drive-api-and-google-picker-api

Google 没有更新他们的 Drive API 文档,所以我们不知道这个变化。

基本上我们必须从 access_token URL 参数切换到 Authorization Header。也就是说,要对 API 进行身份验证,您应该像这样使用 Header:

"Authorization" : "Bearer ACCESS_TOKEN"

这对我们有用。

感谢大家的帮助。

【讨论】:

【参考方案2】:

我们遇到了同样的问题,经过一些测试,我们发现 Google 似乎正在更彻底地检查令牌的来源。

根据https://developers.google.com/drive/api/v3/about-auth

    如果用户批准,则 Google 会为您的应用程序提供一个短期访问令牌。 您的应用程序请求用户数据,并将访问令牌附加到请求中。 如果 Google 确定您的请求和令牌有效,则会返回请求的数据。

我们正在使用 JS 文件选择器,在接收到对象数据后,当我们尝试 $.get 时,文件已正确下载,但其他任何地方的相同 URL 都返回错误。

更新

我们再次使用https://developers.google.com/drive/api/v3/manage-downloads:

要下载存储在 Google Drive 上的文件,请使用 files.get 方法和要下载的文件的 ID 和 alt=media URL 参数。 alt=media URL 参数告诉服务器正在请求下载内容。

【讨论】:

您好,@erKURITA 感谢您的帮助。问题是我们确实有有效的 access_tokens(即使它们是短期的)并且我们已经使用了 alt=media 参数,如果您查看我发布的示例,您将能够在那里找到它。这是奇怪的事情,因为它在 2 月 7 日之前工作正常,然后它开始失败到 alt=media 端点。导出端点(用于 Google Docs 文件)工作正常。

以上是关于Google Drive API - 很抱歉......但您的计算机或网络可能正在发送自动查询的主要内容,如果未能解决你的问题,请参考以下文章

2小时后Google Drive Python API可恢复上传错误401

Google Drive API失败,因为库的google.drive功能不存在

Google Drive API 不能很好地与 ProGuard (NPE) 配合使用

使用PHP无需用户交互即可连接到Google Drive API

为啥我从 google drive rest api 得到服务器回复被禁止?

Drive Builder错误:API Google Drive Spring Boot