【问题标题】:.NET Console Application using Google Drive .NET SDK with API Key Error "but your computer or network may be sending automated queries".NET 控制台应用程序使用带有 API 密钥错误的 Google Drive .NET SDK “但您的计算机或网络可能正在发送自动查询”
【发布时间】:2020-08-26 15:41:30
【问题描述】:

我们正在使用 Google Drive .NET SDK 读取一组与我们公开共享的 Google Drive 文件夹,以便为我们的客户下载图像。该应用程序是一个简单的 .NET 控制台应用程序,它使用 SDK 的 API 密钥,因为我们不进行任何用户身份验证等。

        _driveService = new DriveService(new BaseClientService.Initializer()
        {
            ApiKey = googleApiKey,
            ApplicationName = ApplicationName
        });

我们只需从 Google Drive 文件夹中获取图片列表,然后通过它们循环下载每个图片:

var request = _driveService.Files.Get(fileId);
request.MediaDownloader.ProgressChanged += (IDownloadProgress progress) =>
                        {
                            switch (progress.Status)
                            {
                                case DownloadStatus.Downloading:
                                    {
                                        break;
                                    }
                                case DownloadStatus.Completed:
                                    {
                                        our logic here
                                        break;
                                    }
                                case DownloadStatus.Failed:
                                    {
                                        
                                        break;
                                    }
                            }
                        };
                        request.Download(stream);

这一直很好,直到最近我们收到了 DownloadStatus.Failed 状态,异常是包含以下内容的 HTML 消息:

<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.

现在错误不会立即发生。在该错误消息开始出现之前,我们可以成功执行大约 50 个请求。我们不知道我们必须“等待”多长时间才能发出另一个请求,但考虑到我们正在使用 Google SDK 以及具有 IP 的 Google API 密钥,我们目前没有想法并且非常沮丧限制。同样,我们使用的是 API 密钥,而不是 OAuth,因为这是一个控制台应用程序,一天内几乎没有 1,000 个文件获取请求,这远低于任何速率限制。我们甚至尝试在文件请求之间延迟一分钟,但这并不能阻止应用程序接收失败状态。

知道如何使用 API 密钥防止从控制台应用程序获取此消息吗?

【问题讨论】:

  • 您能否验证您的配额使用情况并检查您是否未达到任何限制?
  • 当然。在过去的 30 天里,我们总共向 Google Drive API 发出了 50,396 个请求。在过去的 2 天里,我们总共提出了 294 个请求。我们的应用程序每天只运行 1 次,以检查和下载我们的客户的任何新图像,并且在大约 50-75 个请求后它始终开始接收上述消息。
  • 很遗憾没有。我也找到并阅读了那篇文章。我们使用的是 API 密钥而不是 Oauth 访问令牌,因为我们正在访问的文件是可公开访问的。这是主要区别,以及使用 Google 的 .NET SDK 的事实。无论 alt=media 标志是否被添加到请求中,都超出了我们的权限范围,因为我们使用的是最新版本的 Google 的 .NET SDK,并且我们没有通过 Javascript 等手动构建 URL。现在我不会不过,这个问题确实在 2020 年 2 月的时间范围内开始发生的可能性不予考虑,并且可能有一定的联系。
  • 您对此有进一步了解或了解更多信息吗?

标签: google-drive-api


【解决方案1】:

看起来这里的问题实际上可能与您的域有关,所以就像您分享的issue 中提到的那样,最好联系GSuite Support

【讨论】:

    【解决方案2】:

    所以我与 GSuite 支持人员交谈,他们说这不是他们的领域。 “我们不支持 Drive API,唯一的方法是订阅 Google Cloud Platform Support,并与他们一起上报我们的案例。您可以在 https://cloud.google.com/support 找到计划,因为它是付费订阅。”

    因此,我将我们的结算帐户(我们也使用 Google Ads)与该项目的 Google Developer 帐户相关联,该帐户具有 API 密钥,此外还利用了 Google Cloud Platform 300 美元的信用额度,该信用额度在顶端。这很有趣,因为已经关联了一个名为“Google XYZ 平台转换帐户”的结算帐户。

    在我删除此“Google 过渡帐户”并关联我们自己的结算帐户后,我们就不再收到错误消息了。

    所以最后,这与我们的实际 API 调用或调用数量无关,而是 Google 方面的“过渡帐户”而不是我们自己的结算帐户设置(即使我们仍然没有付款)任何东西)。

    我希望这可以帮助其他人。

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多