[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Странности с curl
SnowWind
Ребята привет, помогите пожалуйста разобраться с proxy в curl. Проблема заключается в том, что когда обрабатываешь больше 100 страниц с использованием прокси, то curl либо не обрабатывает часть из них, либо не обрабатывает все, выдавая разные ошибки. Но если прокси не устанавливать, то он спокойно обрабатывает 1000 страниц. Скажите, что я делаю не так, не делить же теперь все страницы на запросы по 100 штук?

function multi_curl($str, $uri){
// в $str находятся 1000 ключей для создания урлов из $uri
$multi = curl_multi_init();
$channels = array();
$i = 0;
$proxys = file("proxy.txt"); shuffle($proxys);
foreach ($str as $key => $value){
if($proxys){
$proxy = explode(":", trim($proxys[$i]));
$url = preg_replace('/@/', $key, $uri);
$ch = curl_init();
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // allow redirects
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // times out after 4s
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 GTB6");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]);
if($proxy[2]){
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy[2].':'.$proxy[3]);
}
curl_multi_add_handle($multi, $ch);
$channels[$key] = $ch;
if($i == count($proxys)){
$i = 0;
} else {
$i++;
}
}
else {
$url = preg_replace('/@/', $key, $uri);
$ch = curl_init();
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // allow redirects
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // times out after 30s
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 GTB6");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_multi_add_handle($multi, $ch);
$channels[$key] = $ch;
}
}

$active = null;
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
foreach ($channels as $key => $channel) {
$array = json_decode(curl_multi_getcontent($channel), true);
if(is_array($array))
{
$result[$key] = $array;
}
curl_multi_remove_handle($multi, $channel);echo curl_error($ch);
}

curl_multi_close($multi);
return $result;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.