ホームページ >バックエンド開発 >PHPチュートリアル >try/catch ブロックを使用しても、Guzzle 例外がまだ処理されないのはなぜですか?

try/catch ブロックを使用しても、Guzzle 例外がまだ処理されないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 00:46:02388ブラウズ

Why Are My Guzzle Exceptions Still Unhandled Even With a try/catch Block?

Guzzle 例外処理

API テスト中に Guzzle によってスローされた例外をキャッチしようとすると、実装しているにもかかわらず、永続的な未処理の例外エラーが発生しました。 try/catch ブロック。クエリを詳しく調べて、いくつかの実用的な解決策を検討してみましょう。

指定したコード スニペットには、特定の HTTP 応答コード (401、500 など) を処理するイベント リスナーが含まれています。ただし、try/catch ブロックでキャッチしている例外の種類 (ClientErrorResponseException、ServerErrorResponseException、BadResponseException) は、Guzzle によってスローされる可能性のあるすべての例外をカプセル化できるほど具体的ではありません。

この問題に対処するには、次のことが必要です。このアプローチは、Guzzle の例外を無効にして、例外をトリガーせずにすべてのステータス コードにアクセスできるようにすることです。これは、次の設定をクライアントに追加することで実現できます:

$client = new \Guzzle\Http\Client($httpBase, array(
  'request.options' => array(
     'exceptions' => false,
   )
));

例外を無効にすると、手動で応答のステータス コードを確認し、予期しないコードやエラー コードを処理できます:

$request = $client->get($uri);
$response = $request->send();
$statuscode = $response->getStatusCode();

if ($statuscode > 300) {
  // Handle error conditions
}

または、予期されるステータス コードを明示的に定義し、それに応じて処理することもできます。

if (200 === $statuscode) {
  // Handle 200 OK
}
elseif (304 === $statuscode) {
  // Handle 304 Not Modified
}
elseif (404 === $statuscode) {
  // Handle 404 Not Found
}
else {
  throw new Exception("Invalid response from API...");
}

例外を無効にし、ステータス コードを手動で処理することで、エラー処理をきめ細かく制御でき、さまざまな HTTP に適切に応答できます。応答。

以上がtry/catch ブロックを使用しても、Guzzle 例外がまだ処理されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。