Задать вопрос
@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'));
    }
  • Вопрос задан
  • 167 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Us59 Автор вопроса
Жаль, что никто не догадался, но вот оно решение:
Сервер не возвращает пустоту, если вы столкнулись с подобной ситуацией для начала проверьте, какой статус вернул curl:
curl_getinfo($cp, CURLINFO_HTTP_CODE);
Если 200 - сервер успешно отработал.

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

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

Похожие вопросы
Lachestry Таганрог
от 170 000 до 200 000 ₽
SpectrumData Екатеринбург
от 150 000 до 220 000 ₽
12 дек. 2024, в 23:15
5000 руб./за проект
12 дек. 2024, в 22:26
1500 руб./за проект