Задать вопрос
@Us59

Почему приходит NULL Multi-curl при повторных запросах?

Я отправляю 20 запросов - все в порядке, через минуту пытаюсь отправить еще 20 и мне уже выдает NULL на все запросы просто, после какого-то времени я снова пытаюсь отправить запросы и все в порядке.

spoiler
public function Request ($data)
    {


        $url = "http://123.com/in.php?key=" . $APIKey . "&method=" . $method . "......";

        $multi = curl_multi_init();
        $orders = [];
        $arrayNull = [];

        foreach ($data as $value)
        {
            $ch = curl_init();
            curl_setopt_array($ch, array(
                CURLOPT_URL            => $url,
                CURLOPT_FOLLOWLOCATION => true,
                CURLOPT_USERAGENT      => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
                CURLOPT_TIMEOUT        => 50,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HEADER         => false

            ));
            curl_multi_add_handle($multi, $ch);
            $orders[] = array(
                'url' => $ch,
                'Id' => $value
            );
        }

        $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) {
                usleep(10000);
            }

            do {
                $mrc = curl_multi_exec($multi, $active);
            } while ($mrc == CURLM_CALL_MULTI_PERFORM);

        }

        foreach ($orders as $order)
        {
            $result = json_decode(curl_multi_getcontent($order["url"]), true);

            file_put_contents(__DIR__ . '/logs/RequestHistory.txt', date('Y-m-d h:i:s') . 'Result: ' . json_encode($result) . ' - Order ID: ' . $order["Id"] . PHP_EOL, FILE_APPEND);

            curl_multi_remove_handle($multi, $order["url"]);
// пытался установить sleep(2); но не помогает.
        }
        curl_multi_close($multi);
    }


Почему при регулярной отправке запросов сайт на который я отправляю запросы выдает пустоту? Как решить это?) после 2-3 минут я снова делаю запрос и он возвращает нормальные ответы. Я пытался отправить 100 запросов одним разом - получаю успешные ответы, но через 1 минуту я снова вижу NULL.

p.s. Хочу добавить, что я добавил после CURL вот такой file_get_contents и сервер выдает ответ на file_get_contants, но на curl по прежнему идет пустота!
}
        curl_multi_close($multi);
        var_dump(file_get_contents('http://123.com/in.php?key=123'));
    }
  • Вопрос задан
  • 177 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@Us59 Автор вопроса
Жаль, что никто не догадался, но вот оно решение:
Сервер не возвращает пустоту, если вы столкнулись с подобной ситуацией для начала проверьте, какой статус вернул curl:
curl_getinfo($cp, CURLINFO_HTTP_CODE);
Если 200 - сервер успешно отработал.

В моем случае ошибка заключалась в том, что сервер иногда выдавал ответ не в формате Json и поэтому, когда я использую ф-цию json_decode он ничего не находит и выдает NULL, хотя ответ может быть совершенно другим.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽