Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pengecualian Guzzle Saya Masih Tidak Terkendali Walaupun Dengan Blok cubaan/tangkap?

Mengapa Pengecualian Guzzle Saya Masih Tidak Terkendali Walaupun Dengan Blok cubaan/tangkap?

Barbara Streisand
Barbara Streisandasal
2024-11-01 00:46:02326semak imbas

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

Pengendalian pengecualian Guzzle

Dalam percubaan anda untuk menangkap pengecualian yang dilemparkan oleh Guzzle semasa ujian API, anda telah mengalami ralat pengecualian tidak terkendali yang berterusan walaupun telah melaksanakan blok cubaan/tangkap. Mari kita teliti pertanyaan anda dan terokai beberapa penyelesaian praktikal.

Dalam coretan kod yang anda berikan, anda telah memasukkan pendengar acara untuk mengendalikan kod respons HTTP tertentu (401, 500, dsb.). Walau bagaimanapun, jenis pengecualian yang anda tangkap dalam blok cuba/tangkap (ClientErrorResponseException, ServerErrorResponseException, BadResponseException) tidak cukup khusus untuk merangkum semua kemungkinan pengecualian yang boleh dilemparkan oleh Guzzle.

Untuk menangani isu ini, satu pendekatan adalah untuk melumpuhkan pengecualian untuk Guzzle, membolehkan anda mengakses semua kod status tanpa mencetuskan pengecualian. Ini boleh dicapai dengan menambahkan konfigurasi berikut kepada pelanggan anda:

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

Dengan pengecualian dilumpuhkan, anda boleh menyemak kod status respons secara manual dan mengendalikan sebarang kod yang tidak dijangka atau salah:

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

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

Sebagai alternatif, anda boleh mentakrifkan kod status yang dijangkakan secara eksplisit dan mengendalikannya dengan sewajarnya:

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...");
}

Dengan melumpuhkan pengecualian dan mengendalikan kod status secara manual, anda mendapat kawalan terperinci ke atas pengendalian ralat dan boleh bertindak balas dengan sewajarnya kepada HTTP yang berbeza jawapan.

Atas ialah kandungan terperinci Mengapa Pengecualian Guzzle Saya Masih Tidak Terkendali Walaupun Dengan Blok cubaan/tangkap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn