Апи сайта, при обращении к нему (get запрос) возвращает данные. Если 1 запрос - всё нормально.
Если много запросов подряд (10-15), то приблизительно с 15 запроса данные уже не приходят.
А через минуту всё снова работает.
Сайт регулирует нагрузку, кол-во запросов с одного айпи в течении времени.
Мне же нужно выполнить много запросов. Для этого я написал функцию.
set_time_limit(1200); //20 минут на выполнение скрипта
$data=get_exec_guaranteed('api.site.ru',180,20); //Вызов функции
//Функция
function get_exec_guaranteed($url,$execution_time,$pause_time)
{
$response='error'; //По умолчанию возвращаем слово error т.е. ошибка.
$response_time=time()+$execution_time; //Время, когда цикл остановится, вне зависимости от результата.
//Используем в цикле usleep (время в микросекундах) т.к. sleep в циклах не работает
do {$data=file_get_contents($url); if (!$data) {usleep($pause_time*1000000);} } while (!$data and $response_time>time());
if ($data) $response=$data;
return $response; //Вернем или данные или ошибку
}
Но функция не корректно работает.
При первом отказе Warning: file_get_contents...failed to open stream: HTTP request failed! HTTP/1.1 429 Too Many Requests in... Не идут дальнейшие попытки получения данных. Выводит сразу error. Т.е. попробовал получить данные один раз и всё (выход из цикла?).
А дальше цикл работает. Идут 4 ошибки подряд Warning: file_get_contents...failed to open stream и данные снова приходят. Уже пробует получить данные много раз (не выходит из цикла?).
Итого на 70 запросов, нет данных в 16 и 58 запросе. Т.к. в этих запросах была всего 1 попытка получить данные.
А должно быть минимум 9 (180/20=9 проходов цикла).
Т.е. вывод как то так
data=1
data=2
data=3
Warning: file_get_contents //вот он 1 отказ сайта т.к. выше было куча запросов
data=error //т.е. была всего 1 попытка?
Warning: file_get_contents //а сейчас видно, что работает цикл
Warning: file_get_contents
Warning: file_get_contents
Warning: file_get_contents
data=5 //снова идут данные т.к. прошло 4*20=80 секунд и сайт снова выдает мне информацию
data=6
data=7
Warning: file_get_contents
data=error
Warning: file_get_contents
Warning: file_get_contents
Warning: file_get_contents
Warning: file_get_contents
data=9
data=10
Почему функция работает не корректно? (Подозреваю ошибку в логике.)