我正在嘗試捕獲在我正在開發(fā)的 API 上運行的一組測試中的異常,并且我正在使用 Guzzle 來使用 API 方法。我已經將測試包裝在 try/catch 塊中,但它仍然拋出未處理的異常錯誤。按照他們的文檔中的描述添加事件監(jiān) 聽器似乎沒有做任何事情。我需要能夠檢索 HTTP 代碼為 500、401、400 的響應,實際上任何不是 200 的響應,因為如果不起作用,系統將根據調用結果設置最合適的代碼.
當前代碼示例
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; }
即使使用拋出異常類型的特定 catch 塊,我仍然會返回
Fatal error: Uncaught exception 'GuzzleHttpExceptionClientErrorResponseException' with message 'Client error response [status code] 401 [reason phrase] Unauthorized [url]
如您所料,頁面上的所有執(zhí)行都會停止。添加 BadResponseException 捕獲允許我正確捕獲 404,但這似乎不適用于 500 或 401 響應。誰能建議我哪里出錯了。
三大改造***工資電飯鍋三大改造***工資電飯鍋三大改造***工資電飯鍋三大改造***工資電飯鍋三大改造***工資電飯鍋三大改造***工資電飯鍋
阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥
阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥阿帆VS啊打工仔手動蝶閥
艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅
艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅
艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅
艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅艾師傅
阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是
根據您的項目,可能需要禁用 guzzle 異常。有時編碼規(guī)則不允許流量控制出現異常。您可以為 Guzzle 3 禁用例外,如下所示:
$client = new \Guzzle\Http\Client($httpBase, array( 'request.options' => array( 'exceptions' => false, ) ));
這不會禁用諸如超時之類的curl異常,但現在您可以輕松獲取每個狀態(tài)代碼:
$request = $client->get($uri); $response = $request->send(); $statuscode = $response->getStatusCode();
要檢查您是否獲得了有效的代碼,您可以使用如下內容:
if ($statuscode > 300) { // Do some error handling }
...或者更好地處理所有預期的代碼:
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..."); }
適用于 Guzzle 5.3
$client = new \GuzzleHttp\Client(['defaults' => [ 'exceptions' => false ]] );
感謝@mika
Guzzle 6
$client = new \GuzzleHttp\Client(['http_errors' => false]);
阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是