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!