Задать вопрос
Diversia
@Diversia

Как правильно между запросами cURL делать паузу?

Есть функция, которая в выполняется в цикле:
function curlNew($ur)
{
	//sleep(rand(2,4)); // первый вариант (наверное наиболее правильный)
		$ch = curl_init($url); // инициализация
		$link = $url;
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connecTimeout); // таймаут соединения
		curl_setopt($ch, CURLOPT_TIMEOUT, $maxTimeout); // макс. выполнение
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
		curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
		if ($proxy) {curl_setopt($ch, CURLOPT_PROXY, $proxy);}
	//sleep(rand(2,4)); // второй вариант
		$html = curl_exec($ch); // получаем HTML
		$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
		$httpTime = round(curl_getinfo($ch, CURLINFO_TOTAL_TIME), 2);
		$proxyParse = parse_url("http://".$proxy, PHP_URL_HOST);

// ...
}

for ($i=0; $i < 3; $i++) { 
	echo curlNew();
}

Куда правильнее вставить sleep(), чтобы между запросами была пауза. Как понимаю, если определить правильное место в коде для sleep(), то это также будет влиять на экономию ресурсов сервера.
  • Вопрос задан
  • 875 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Эконимии ресурсов сервера вы так не добьётесь, потому что чем дольше будет выполняться скрипт - тем дольше будут заняты ресурсы сервера. Вот ресурсы канала передачи данных - да, не будут заняты...

sleep() лучше делать в самом цикле for(), что-бы "прямо на месте" можно было варьировать скорость загрузки требуемых данных.
Ответ написан
Комментировать
Vamp
@Vamp
Сразу после вызова функции.

for ($i=0; $i < 3; $i++) { 
  echo curlNew();
  sleep($sleepTime);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Tuborg
@Tuborg
butalex
Вообще по правильному сделать не так.
Сначала делаешь ф-цию curl_init() перед циклом, потом цикл, потому curl_close().
Зачем тебе открывать кучу сессий курла, если можно сделать одну и с нее отправить N запросов?

$ch = curl_init();
foreach ($urls as $url) {
     echo curlNew($ch, $url);
}
curl_close($ch);


И не нужно никаких слипов. А вообще огонь сделать асинхронно, есть куча либ.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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