Функция работает и успешно отрабатывает многие запросы. Но сейчас столкнулся с тем, что при запросе к URL он возвращает пустоту (херн с ним), при выводе ошибок - ошибка не отображается и не записывается в массив (пробовал).
URL возвращает пустоту только на некоторые Proxy которые мы подставляем.
Вот сам код:
spoilerfunction 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ом, вот такая ф-ция:
spoilerfunction 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 - ошибок нет, и результат пустой.