Суть задачи: Нужно делать 100 или больше запросов в минуту к сайту и передавать данные.
Суть проблемы: При большом количестве запросов сайт возвращает NULL.
$ch = curl_init();
foreach ($data as $value) {
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_exec($ch);
}
curl_close($ch);
Вот этот код работает при 2-5 запросах, но при 20 и более уже через раз возвращает просто пустоту (скорее всего защита сайта срабатывает)
Вопрос: Как решить мою задачу?) Использовать Multi curl?)
По multi-curl нашел пример:
spoiler<?php
$urls = array(
'http://graph.facebook.com/http://tech.vg.no',
'http://graph.facebook.com/http://www.vg.no',
);
$multi = curl_multi_init();
$channels = array();
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multi, $ch);
$channels[$url] = $ch;
}
$active = null;
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($multi) == -1) {
continue;
}
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
foreach ($channels as $channel) {
echo curl_multi_getcontent($channel);
curl_multi_remove_handle($multi, $channel);
}
curl_multi_close($multi);
?>
Попытался внедрить себе, но че-то не получилось (не фартануло) :D
в channels я так понимаю сначала генерируются-записываются ссылки, затем из этого массива они вытаскиваются и через foreach выполняется запрос curl_multi_getcontent($channel); столько раз, сколько записей в массиве.
У меня почему-то вся песТня заканчивается на одном запросе.
В итоге, какое решение в данной ситуации мне подходит?)