@burov0798
Пытаюсь изучать php\js

Как в Guzzle сделать так, чтобы исключения не завершали скрипт?

Загружаю сайты, некоторые не загружаются и выпадает ошибка и скрипт завершается:
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();

Как отлавливать подобные ошибки? Как сделать так, чтобы они не завершали скрипт?
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 1
toxa82
@toxa82
Ну вам нужно ловить исключения с помощью try ... catch. Куда его воткнуть в этой дичи колбэков я без понятия, но примерно подозреваю что вокруг "return $client->request...".
Ответ написан
Ваш ответ на вопрос

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

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