Rumah  >  Soal Jawab  >  teks badan

Menangkap pengecualian Guzzle

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粉511749537P粉511749537312 hari yang lalu997

membalas semua(12)saya akan balas

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

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:15:06

    . Transformasi Utama Periuk*** Periuk Nasi Gaji

    balas
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:14:13

    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

    balas
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:13:10

    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

    balas
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:12:11

    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

    balas
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:11:23

    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

    balas
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:10:26

    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

    balas
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:08:15

    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

    balas
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:06:56

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

    balas
    0
  • P粉701491897

    P粉7014918972023-11-17 14:08:04

    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]);

    balas
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:05:35

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

    balas
    0
  • Batalbalas