超过用户速率限制(429错误)


User-rate limit exceeded (429 error)

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

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

我最近得到了这个错误,我检查了我的配额,当我得到它的listUserMessages(消息)。列表请求)计数为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
        }
        ...
}

错误429,'Too Many Requests'发生在应用程序同时发送多个请求时。也许你可以尝试实现指数级回落?

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

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