Запретить Guzzle создавать ошибку 500 при ответе, отличном от 200

#php #guzzle

#php #guzzle

Вопрос:

На моем веб-сайте я использую Guzzle для сообщения о попытках взлома AbuseIPDB. Например, когда хакер посещает /.env, отчет будет автоматически отправлен. AbuseIPDB выдает 429, когда вы отправляете более одного отчета для одного и того же IP. Затем Guzzle выдает ошибку 500, поскольку AbuseIPDB не дал 200 OK.

Мой вопрос в том, как я могу предотвратить уничтожение программы Guzzle при получении ответа, отличного от 200 OK? Возможно ли это сделать?

Комментарии:

1. Перехват исключений или вы можете установить эту опцию в своем запросе «‘exceptions’ => false», чтобы отключить исключения.

Ответ №1:

Исключение GuzzleHttp Exception ServerException выдается для ошибок уровня 500, если для параметра запроса http_errors установлено значение true. Это исключение распространяется из GuzzleHttp Exception BadResponseException .

Я добавлю примерный пример того, как обрабатывать только 500 ошибок,

 try{
  $client = new GuzzleHttpClient(['headers' => ['Authorization' => 'Bearer ' . $token]]);
  
  $guzzleResponse = $client->get('/foobar');
  // or can use
  // $guzzleResponse = $client->request('GET', '/foobar')
    if ($guzzleResponse->getStatusCode() == 200) {
         $response = json_decode($guzzleResponse->getBody(),true);
         //perform your action with $response 
    } 
}
catch(GuzzleHttpExceptionServerException $se){
   // you can catch here 500 response errors
   // You can either use logs here you can use this package to handle logs https://github.com/Seldaek/monolog
   return $se->getMessage();
}catch(Exception $e){
   //other errors 
}
 

Аналогичным образом вы можете обработать 400 исключений с помощью ClientException, подробнее об исключениях см. В документах.