Здравствуйте,
Debian 6 (squeeze)
PHP 5.4.45
libcurl 7.21.0
Как заставить curl_multi работать через прокси SOCKS5?
Вот обычный curl: (он работает - возвращает заголовок)
$url = "https://yandex.ru";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 1); // читать заголовок
curl_setopt($ch, CURLOPT_NOBODY, 1); // читать ТОЛЬКО заголовок без тела
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_PROXY, "164.132.72.41:1080");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$return = curl_exec($ch);
curl_close($ch);
echo "<pre>";
print_r($return);
echo "</pre>";
А вот тот же код но в мультикурле:$urls = array(
'https://yandex.ru',
'https://google.ru',
);
$multi = curl_multi_init();
$channels = array();
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 1); // читать заголовок
curl_setopt($ch, CURLOPT_NOBODY, 1); // читать ТОЛЬКО заголовок без тела
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_PROXY, "164.132.72.41:1080");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_multi_add_handle($multi, $ch);
$channels[$url] = $ch;
}
$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) {
continue;
}
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
foreach ($channels as $channel) {
$info = curl_getinfo($channel);
echo curl_multi_getcontent($channel);
curl_multi_remove_handle($multi, $channel);
}
curl_multi_close($multi);
echo "<pre>";
print_r($info);
echo "</pre>";
Если использовать HTTP прокси, то все работает.
Мне нужно SOCKS5 с авторизацией.
Предполагаю что дело в libcurl 7.21.0, т.к., на локальном ПК Win7 Xampp это работает, но там libcurl 7.32.0.
Тогда как обновить libcurl ?
Большое уже спасибо.