为什么当我只使用一个请求时,我得到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-errorsGoogle的PHP客户端API仍处于测试阶段,所以现在可以看看它的Java实现:https://developers.google.com/api-client-library/java/google-http-java-client/backoff