每秒进行多次调用时,Google API Client for Google BigQuery Call 的授权失败并出现错误 403

Posted

技术标签:

【中文标题】每秒进行多次调用时,Google API Client for Google BigQuery Call 的授权失败并出现错误 403【英文标题】:Authorization fails with Error 403 randomly for Google API Client for Google BigQuery Call when making multiple calls per second 【发布时间】:2014-01-29 19:03:24 【问题描述】:

我在尝试授权 Google API 客户端进行 Google Big Query 调用时看到 403 RANDOMLY(有时有效,有时失败)。

为了提供更多上下文,我以每秒 5 到 10 次的速度同时调用多个 api,因此当我按顺序进行调用时,不会出现错误。但是,当我每秒拨打几个电话时,我会收到错误消息。我在这里检查了 BigQuery 速率限制:https://developers.google.com/bigquery/quota-policy 它说我最多可以发出 20 个并发查询。我很确定,我没有达到速率限制。

我将不胜感激任何有系统地解决这个问题的指针或建议。 谢谢, 导航

代码如下:

    def initialize
     client = Google::APIClient.new
     path_to_key_file = "/Users/abcyoo/crazy/crazy-google-client-key.p12" #dev
     passphrase = "XXXXXXXX"
     key = Google::APIClient::PKCS12.load_key(path_to_key_file, passphrase)
     service_account = Google::APIClient::JWTAsserter.new(
         '1063766308008@developer.gserviceaccount.com',
         'https://www.googleapis.com/auth/bigquery',
         key)
         client.authorization = service_account.authorize
     client.authorization.fetch_access_token!
     bq = client.discovered_api("bigquery", "v2")
     return client,bq
   end

这是我收到的错误消息:

    Signet::AuthorizationError (Authorization failed.  Server message:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Google Accounts</title><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0" /><link rel='stylesheet' type='text/css' href='https://ssl.gstatic.com/accounts/o/1893590695-error_page_css_ltr.css'>

403。这是一个错误。

您无权执行此请求。我们知道的就这些。):
    signet (0.4.5) lib/signet/oauth_2/client.rb:875:in `fetch_access_token'
    signet (0.4.5) lib/signet/oauth_2/client.rb:888:in `fetch_access_token!'
     app/controllers/application_controller.rb:105:in `initialize'

【问题讨论】:

【参考方案1】:

您是否每秒调用 client.discoverty_api 5-10 次?如果是这样,那可能就是限制您的速率。您可以每个线程调用一次或一次并重用 bigquery 服务吗?

【讨论】:

谢谢乔丹。这就是问题所在。感谢您的快速帮助

以上是关于每秒进行多次调用时,Google API Client for Google BigQuery Call 的授权失败并出现错误 403的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Maps API v3.0 中多次调用 map.fitBounds()

请求令牌时,Google API 刷新令牌为无

通过 OAuth 对 Google API 进行经过身份验证的调用时遇到问题

Google Analytics:尝试进行授权 API 调用时,JWT 签名无效 (invalid_grant)

Google Maps API OVER QUERY LIMIT 每秒限制

C# EF6 使用 Unity 对一个上下文进行多次异步调用 - Asp.Net Web Api