Загружаю сайты, некоторые не загружаются и выпадает ошибка и скрипт завершается:
PHP Fatal error: Uncaught GuzzleHttp\Exception\ConnectException: cURL error 28: Operation timed out after 15001 milliseconds with 0 bytes received
$data = [];
$handle = fopen("site.txt", "r");
if ($handle) {
while (($s = fgets($handle)) !== false) {
$data[] = trim($s);
}
fclose($handle);
}
$requests = function ($data) use ($client, $proxy) {
foreach ($data as $u) {
$p = trim($proxy[array_rand($proxy)]);
yield function() use ($client, $u, $p) {
return $client->request(
'GET',
trim($u),
[
'proxy' => $p
]
);
};
}
};
$pool = new Pool($client, $requests($data), [
'concurrency' => 25,
'fulfilled' => function ( $response, $index) {
$body = $response->getBody();
$remainingBytes = $body->getContents();
$stringBody = (string) $body;
$str = preg_replace("/<.*?>/", " ", $remainingBytes);
echo $response->getStatusCode().PHP_EOL;
},
'rejected' => function (\GuzzleHttp\Exception\TransferException $reason, $index) {
if ($reason->hasResponse()){
// this will mainly catch RequestException(Exception with statuscode and responses)
if ($reason->getResponse()->getStatusCode() == '400') {
echo $reason->getResponse()->getStatusCode();
} elseif($reason->getResponse()->getStatusCode() == '403'){
echo $reason->getResponse()->getStatusCode();
}else{
echo $reason->getResponse()->getStatusCode();
}
} else{
echo "error";
}
},
]);
// Инициализируем трансферы и создаём promise
$promise = $pool->promise();
// Ожидаем ответ promise // Принудительно завершаем пул запросов
$promise->wait();
Как отлавливать подобные ошибки? Как сделать так, чтобы они не завершали скрипт?