Rumah > pembangunan bahagian belakang > tutorial php > 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
Lepaskan: 2024-11-01 00:46:02
asal
392 orang telah melayarinya

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,
   )
));
Salin selepas log masuk

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
}
Salin selepas log masuk

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...");
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan