【问题标题】:User-rate limit exceeded (429 error)超出用户速率限制(429 错误)
【发布时间】:2015-08-19 15:54:45
【问题描述】:

为什么我只使用一个请求时收到 429 错误,告诉我超出了用户速率限制?:

$messagesResponse = $service->users_messages->listUsersMessages('me');

我最近遇到了这个错误,我检查了我的配额,我得到它listUserMessages(messages.list 请求)算作 5 个单位,我在一秒钟内得到了 250 个限制。

实在想不通。

一些代码(这里我也使用搜索查询,但我有没有“q”参数并不重要):

class MessageReceiver implements ReceiverContract {

/**
 * @var Google_Client
 */
protected $client;

/**
 * Inject dependencies.
 */
public function __construct()
{
    $this->client = new Google_Client();
    $this->client->setClientId(config('services.gmail.clientId'));
    $this->client->setClientSecret(config('services.gmail.clientSecret'));
}

public function searchMessages($user, $query)
{
    $this->client->refreshToken($user->google_refresh_token);

    $service = new Google_Service_Gmail($this->client);
    $pageToken = null;
    $messages = [];

    do {
        $this->client->setUseBatch(false);
        try {
            $messagesResponse = $service->users_messages->listUsersMessages('me',
                ['pageToken' => $pageToken, 'q' => $query]
            );
        } catch (\Google_Service_Exception $e) {
            dd($e->getErrors()); // 429 error
        }
        ...
}

【问题讨论】:

  • 您能否发布完整的响应(HTTP 标头 + 正文)?
  • 使用 php lib 时如何获得 http 响应? listUserMessages 抛出异常,我能做的就是输出一些getErrors之类的方法。

标签: php google-api-php-client gmail-api


【解决方案1】:

当您的应用同时发送多个请求时,会发生错误 429,“请求过多”。也许尝试实施指数退避?

https://developers.google.com/drive/web/handle-errors

Google 的 PHP 客户端 API 仍处于 Beta 版,所以现在看看它的 Java 实现:https://developers.google.com/api-client-library/java/google-http-java-client/backoff

【讨论】:

  • 这是我只发送一个请求,获取用户消息请求......例如,8小时后相同的代码工作
  • 好吧,整个代码由几个类组成,但我得到的错误实际上是关于我在问题中提到的那一行。在行之前我没有收到任何错误。无论如何,发布一些代码
猜你喜欢
  • 2014-11-12
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2020-07-09
  • 1970-01-01
相关资源
最近更新 更多