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

Barbara Streisand
リリース: 2024-11-01 00:46:02
オリジナル
322 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!