@aopil

Почему Multi Curl возвращает пустоту?

Функция работает и успешно отрабатывает многие запросы. Но сейчас столкнулся с тем, что при запросе к URL он возвращает пустоту (херн с ним), при выводе ошибок - ошибка не отображается и не записывается в массив (пробовал).
URL возвращает пустоту только на некоторые Proxy которые мы подставляем.
Вот сам код:
spoiler
function MultiRequest ($data)
{
        $multi = curl_multi_init();
        $handles = [];
        $array = [];

        foreach ($data as $key)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, 'https://www.123.ru');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
            curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

            curl_setopt($ch, CURLOPT_PROXY, $key["Ip"] . ':' . $key["Port"]);
            curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
            curl_setopt($ch, CURLOPT_TIMEOUT, 30);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

            curl_multi_add_handle($multi, $ch);

            $handles[] = array(
                'url'           => $ch,
                'Ip'            => $key["Ip"]
            );
        }

        $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);
                // continue; 
            }

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

        }

        foreach ($handles as $handle)
        {
            $result = curl_multi_getcontent($handle["url"]);

            var_dump($result); // тут при выводе пустота

            if (curl_errno($ch)) { // ошибок не выдает.
                echo 'Error:' . curl_error($ch);
            }

            curl_multi_remove_handle($multi, $handle["url"]);
        }

        curl_multi_close($multi);

        return $array;
}


Я подумал, и решил попробовать сделать точно такой же запрос, но уже не Multu curlом, вот такая ф-ция:
spoiler
function Test ()
    {
        $array = [];	
		$ch = curl_init();

		curl_setopt($ch, CURLOPT_URL, 'https://www.123.ru');
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

		curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
                curl_setopt($ch, CURLOPT_PROXY, '11.11.11.11:80');
                curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);

	        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
	        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

		$result = curl_exec($ch);

                var_dump($result);

		if (curl_errno($ch)) {
		    echo 'Error:' . curl_error($ch);
		}
        curl_close($ch);
        return $array;
    }

И на Ваше удивление эта ф-ция отрабатывает успешно! и возвращает ошибку:
Error:Received HTTP code 500 from proxy after CONNECT

в Multu курле я делаю сейчас только 1 запрос (тестовый) и возвращается пустота, и ошибок нет.

Вопрос: В чем проблема? обычным curl запросом мы получаем ошибку, а если multu - ошибок нет, и результат пустой.
  • Вопрос задан
  • 196 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ну так используйте в выводе ошибки:
if (curl_errno($ch)) { // ошибок не выдает.
                echo 'Error:' . curl_error($ch);
            }

созданный curl поток:
if (curl_errno($handle["url"])) { // ошибок не выдает.
                echo 'Error:' . curl_error($handle["url"]);
            }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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