Хоть прокси и не паблик, может возникать проблемы с таймаутами конектов, пустыми ответами серверов и т.д.
Я обычно заворачиваю всё это в
while (count($urls) > 0) { ... }
и потом в проверке
$iP = curl_getinfo($curl, CURLINFO_PRIMARY_IP);
$code = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
if ($iP !== null && $code > 0 && filter_var($iP, FILTER_VALIDATE_IP)) { ... unset($urls[$i]); }
снимаю успешный урл из курл запроса из общего массива с урлами, для неудачных запросов идёт повторение и так пока массив урлов не станет пустым.