Menangkap pengecualian Guzzle
P粉511749537
P粉511749537 2023-11-16 14:36:03
0
12
1195

Saya cuba menangkap pengecualian dalam set ujian yang dijalankan pada API yang saya bangunkan dan saya menggunakan Guzzle untuk menggunakan kaedah API. Saya telah membungkus ujian dalam blok cuba/tangkap tetapi ia masih menimbulkan ralat pengecualian yang tidak dikendalikan. Menambah pendengar acara seperti yang diterangkan dalam dokumentasi mereka nampaknya tidak melakukan apa-apa. Saya perlu dapat mendapatkan semula respons dengan kod HTTP 500, 401, 400, sebenarnya sebarang respons yang bukan 200, kerana jika itu tidak berfungsi, sistem akan menetapkan kod yang paling sesuai berdasarkan hasil panggilan.

Contoh kod semasa

foreach($tests as $test){

        $client = new Client($api_url);
        $client->getEventDispatcher()->addLi stener('request.error', function(Event $event) {        

            if ($event['response']->getStatusCode() == 401) {
                $newResponse = new Response($event['response']->getStatusCode());
                $event['response'] = $newResponse;
                $event->stopPropagation();
            }            
        });

        try {

            $client->setDefaultOption('query', $query_string);
            $request = $client->get($api_version . $test['method'], array(), isset($test['query'])?$test['query']:array());


          // Do something with Guzzle.
            $response = $request->send();   
            displayTest($request, $response);
        }
        catch (GuzzleHttpExceptionClientErrorResponseException $e) {

            $req = $e->getRequest();
            $resp =$e->getResponse();
            displayTest($req,$resp);
        }
        catch (GuzzleHttpExceptionServerErrorResponseException $e) {

            $req = $e->getRequest();
            $resp =$e->getResponse();
            displayTest($req,$resp);
        }
        catch (GuzzleHttpExceptionBadResponseException $e) {

            $req = $e->getRequest();
            $resp =$e->getResponse();
            displayTest($req,$resp);
        }
        catch( Exception $e){
            echo "AGH!";
        }

        unset($client);
        $client=null;

    }

Walaupun dengan blok tangkapan tertentu yang melemparkan jenis pengecualian, saya masih mendapat pulangan

Fatal error: Uncaught exception 'GuzzleHttpExceptionClientErrorResponseException' with message 'Client error response [status code] 401 [reason phrase] Unauthorized [url]

Seperti yang anda jangkakan, semua pelaksanaan pada halaman terhenti. Menambah tangkapan BadResponseException membolehkan saya menangkap 404 dengan betul, tetapi ini nampaknya tidak berfungsi dengan 500 atau 401 respons. Bolehkah sesiapa mencadangkan di mana silap saya.

P粉511749537
P粉511749537

membalas semua(12)
尊渡假赌尊渡假赌尊渡假赌

. Transformasi Utama Periuk*** Periuk Nasi Gaji

尊渡假赌尊渡假赌尊渡假赌

Afan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan Fan VS Ah injap rama-rama manual pertaruhan Ah Fan VS Ah injap rama-rama manual pertaruhan Ah Fan VS Ah injap rama-rama manual pertaruhan Ah Fan VS Ah injap rama-rama manual pertaruhan Ah Fan VS Ah rama-rama manual pertaruhan injap Ah Fan VS Ah injap rama-rama manual pertaruhan

尊渡假赌尊渡假赌尊渡假赌

Afan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan VS Ah injap rama-rama manual orang gaji Ah Fan Fan VS Ah injap rama-rama manual pertaruhan Ah Fan VS Ah injap rama-rama manual pertaruhan Ah Fan VS Ah injap rama-rama manual pertaruhan Ah Fan VS Ah injap rama-rama manual pertaruhan Ah Fan VS Ah rama-rama manual pertaruhan injap Ah Fan VS Ah injap rama-rama manual pertaruhan

尊渡假赌尊渡假赌尊渡假赌

Cikgu Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai

尊渡假赌尊渡假赌尊渡假赌

Cikgu Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai

尊渡假赌尊渡假赌尊渡假赌

Cikgu Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai

尊渡假赌尊渡假赌尊渡假赌

Cikgu Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Tuan Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai, Cikgu Ai

尊渡假赌尊渡假赌尊渡假赌

Ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya. Ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya. ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya. , ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya , ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya.

P粉701491897

Bergantung pada projek anda, anda mungkin perlu melumpuhkan pengecualian guzzle. Kadangkala peraturan pengekodan tidak membenarkan pengecualian kawalan aliran. Anda boleh lumpuhkan pengecualian untuk Guzzle 3 seperti berikut:

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

Ini tidak melumpuhkan pengecualian curl seperti tamat masa, tetapi kini anda boleh mendapatkan setiap kod status dengan mudah:

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

Untuk menyemak sama ada anda mendapat kod yang sah, anda boleh menggunakan sesuatu seperti ini:

if ($statuscode > 300) {
  // Do some error handling
}

...atau lebih baik lagi kendalikan semua kod yang dijangkakan:

if (200 === $statuscode) {
  // Do something
}
elseif (304 === $statuscode) {
  // Nothing to do
}
elseif (404 === $statuscode) {
  // Clean up DB or something like this
}
else {
  throw new MyException("Invalid response from api...");
}

Untuk Guzzle 5.3

$client = new \GuzzleHttp\Client(['defaults' => [ 'exceptions' => false ]] );

Terima kasih @mika

Guzzle 6

$client = new \GuzzleHttp\Client(['http_errors' => false]);
尊渡假赌尊渡假赌尊渡假赌

Ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya. Ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya. ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya. , ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya , ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya, ya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan