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

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

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

Войти через центр авторизации
Похожие вопросы