Метод регулирования cURL

#php #curl #throttling

#php #curl #регулирование

Вопрос:

Я работаю над проектом, использующим api, моя подписка позволяет мне выполнять 2 запроса в секунду.

Этот API позволяет находить слова, которые связаны с другим словом.

Мой проект заключается в рекурсивном использовании этого API. слово A выдает слово B и C, слова B и C каждое дают по 2 слова и т.д., рекурсивно, с ограничением, которое указывает пользователь.

Я сохраняю каждое слово в объекте «word». В __конструкции этого объекта я вызываю функцию, которая вызывает этот API и которая преобразует каждый результат в новый объект.

Все работает, единственная проблема заключается в том, что когда указанный уровень рекурсивности слишком высок, API ничего не возвращает, хотя у меня есть таймер на 0,5 секунды.

Итак, я настроил цикл. Пока ответ на мой запрос cURL не равен 200, я повторяю его с таймером в 0,5 секунды.

         $a = 200;
        $httpcode = 0;
        while ($httpcode !== $a) {

            $postRequest = [
                'content' => $this->getMot(),
                'lang' => 'fr',
                'limit' => $this->getLimite(),
                'key' => "//////////////////////"
            ];
            $cURLConnection = curl_init('https://api.keywords.gg/entities');
            curl_setopt($cURLConnection, CURLOPT_HTTPHEADER,
                ['Content-Type: application/json']);
            curl_setopt($cURLConnection, CURLOPT_POSTFIELDS, json_encode($postRequest));
            curl_setopt($cURLConnection, CURLOPT_RETURNTRANSFER, true);
            $apiResponse = curl_exec($cURLConnection);
            $httpcode = curl_getinfo($cURLConnection, CURLINFO_HTTP_CODE);
            $apiResponse = curl_exec($cURLConnection);
            curl_close($cURLConnection);
        }
  

Я думаю, что мой метод регулирования неверен. Не могли бы вы дать мне несколько советов?

Комментарии:

1. Разместите здесь свой фактический код, а не картинку вашего кода.

2. Изображения кода плохо влияют на доступность, плохо подходят для поиска и делают невозможным копирование вашего кода для его запуска, чтобы найти какие-либо ошибки.

Ответ №1:

Как вы можете видеть в документации sleep, он ожидает целое число.

Вы отправляете плавающее число 0.6, затем преобразуете его в целое значение 0.

Таким образом, ваш вызов sleep становится:

 sleep(0)
  

Вам нужно использовать usleep (int микросекунд), если вам нужна большая точность.

 usleep(600)