Задать вопрос
fix20152
@fix20152
javascript developer

Curl, proxy — виснет

Добрый день.
Есть проблема, посоветуйте решения.
Есть скрипт который через библиотеку curl берет информацию, с моего же сайта на юкозе, ну для того чтобы не блокировал юкоз мой айпи, использую прокси. Вот здесь и проблема, что если прокси адрес не работает, тогда скрипт у меня крутится вечно и нечего не делает. Пробовал разными способами уйти но не как не получается.
function getData($url){
$proxy=lastIp();
if(isset($proxy)){

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, trim($url));
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла;
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
$res=curl_exec($ch);
if(curl_error($ch))
{
/*
$error = curl_error($ch).'('.curl_errno($ch).')
';
echo $error."
";
curl_close($ch);
deleteIp($proxy);
*/
flush();
getData($url);

}
else
{
if(preg_match("/Forbidden/i",$res)){
echo "Forbidden
";
deleteIp($proxy);
flush();
getData($url);
}else{
curl_close($ch);
deleteIp($proxy);
flush();
return $res;
}
}
curl_close($ch);
deleteIp($proxy);
flush();
return $res;
}else{
echo "End of proxy address
";
getProxyList();
flush();
getData($url);
}
}
  • Вопрос задан
  • 3487 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
ScorpLeX
@ScorpLeX
У вас не задан тип прокси CURLOPT_PROXYTYPE, так же лучше будет добавить еще
CURLOPT_FAILONERROR.
Так же нужно проверить функции lastIp и deleteIp.
Ответ написан
Комментировать
fix20152
@fix20152 Автор вопроса
javascript developer
Проверить lastIp и deleteIp проверял работают, только у меня проблема в том что до deleteIp не доходит, тоесть если не рабочий прокси тогда оно виснит и функция не может удалить это айпи и снова начать сначала. Вот здесь загвоздка.
Ответ написан
fix20152
@fix20152 Автор вопроса
javascript developer
Пробывал CURLOPT_PROXYTYPE и CURLOPT_FAILONERROR. все равно виснит
Ответ написан
fix20152
@fix20152 Автор вопроса
javascript developer
Все спасибо заработало вот готов может кому-то понадобиться
function getData($url){
$proxy=lastIp();
if(isset($proxy)){

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, trim($url));
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла;
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
$res=curl_exec($ch);
if(curl_error($ch))
{
/*
$error = curl_error($ch).'('.curl_errno($ch).')
';
echo $error."
";
curl_close($ch);
deleteIp($proxy);
*/
$error = curl_error($ch).'('.curl_errno($ch).')
';
echo $error."
";
deleteIp($proxy);
flush();
getData($url);
}
else
{
if(preg_match("/Forbidden/i",$res)){
echo "Forbidden
";
deleteIp($proxy);
flush();
getData($url);
}else{
curl_close($ch);
deleteIp($proxy);
flush();
return $res;
}
}
curl_close($ch);
deleteIp($proxy);
flush();
return $res;
}else{
echo "End of proxy address
";
getProxyList();
flush();
getData($url);
}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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