@Us59

Что использовать в этой ситуации?

Суть задачи: Нужно делать 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); столько раз, сколько записей в массиве.

У меня почему-то вся песТня заканчивается на одном запросе.
В итоге, какое решение в данной ситуации мне подходит?)
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 3
Noizefan
@Noizefan
на каждые 2-5 запроса нужен либо сон либо другие айпи
Ответ написан
@grinat
Обычно null приходит если не установлено follow location, проставь и смотри заново. Еще в курле есть параметр для деабага, там будет вся подробная инфа о том как идет соединение.
Ответ написан
402d
@402d
начинал с бейсика на УКНЦ в 1988
прочти вот это https://habr.com/ru/post/347196/
минимальное введение как борются с DDOs

Если данные шлете официально, проси помощи/совета у них.
В белый список думаю не включат, а квоты могут поднять.

Замучаешь запросами совсем, твой ip забанится в iptables автоматом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы