Как заставить Curl_Multi_Exec возвращать более 20 хороших запросов, не имея 500 кодов ошибок

В настоящее время я нахожусь в процессе создания сценария, который будет отправлять большое количество URL-адресов в API Google Pagespeed Insights (ниже указанного 100 на пользователя на 100 секунд), обрабатывать возвращенную информацию и добавлять результаты в мою базу данных. таблицы соответственно.

Моя проблема возникает, когда я пытаюсь отправить более 20 с использованием Curl_multi_exec, так как любое количество запросов, превышающее эту сумму, отправит обратно 500 сообщений об ошибках, засыпанных повсюду, так что есть только 20 хороших запросов с информацией (400 ответов кода).

Я считаю, что я намного ниже того, что мне разрешено обрабатывать одновременно с этим API. Я уже пытался изменить поле php.ini ‘max_file_uploads’, чтобы оно было больше 20; однако это не решило проблему.

Мой код выглядит следующим образом:

    $results = array();

$pagespeedInsightsUrls = new PagespeedInsightsUrls();
$pagespeedUris = $pagespeedInsightsUrls->getPagespeedInsightsUrls();

$cSession = curl_multi_init();

for($i = 0; $i <= 29; $i++ ) {

$curly[$i] = curl_init();

$pagespeedURL = $googlePagespeedURL .$domains['common']. $pagespeedUris[$i]['pagespeed_urls'] . $strategy[0] . $apiKeys['TEST'];
curl_setopt($curly[$i], CURLOPT_URL, $pagespeedURL);
curl_setopt($curly[$i], CURLOPT_RETURNTRANSFER, true);

curl_multi_add_handle($cSession, $curly[$i]);
}
$running = null;

do {
curl_multi_exec($cSession, $running);
} while($running > 0);

foreach($curly as $i => $c) {
$results[$i] = curl_multi_getcontent($c);
curl_multi_remove_handle($cSession, $c);
}

curl_multi_close($cSession);

При этом я получил бы 10 500 кодов, засоренных по 20 «хорошим» запросам. Этот скрипт запускается в среде Zend_framework.

Кто-нибудь знает, с чего начать искать решение этой проблемы? Документация для Curl_Multi сильно отсутствует.

1

Решение

Похоже, что сервер API Google ограничивает 20 одновременных подключений. В конце концов, Curl реализует эти параллельные запросы не путем мультиплексирования по одному соединению, а выполняя каждое в своем собственном соединении, требуя соединения для каждого запроса. Для серверов HTTP вполне нормально отклонять несколько IP-соединений одновременно, хотя в этом случае похоже, что Google установил ограничение на уровне HTTP-сервера, поскольку он принимает соединение, но возвращает ошибку 500.

Любое ограничение на количество одновременных подключений — это отдельное ограничение на их максимальное количество запросов в день или на 100 секунд.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector