2019 itibariyle , istisnayı ele almak, yanıt gövdesini, durum kodunu, mesajı ve diğer bazen değerli yanıt öğelerini almak için yukarıdaki yanıtlardan ve Guzzle belgelerinden ayrıntılandırdığım şey burada .
try {
/**
* We use Guzzle to make an HTTP request somewhere in the
* following theMethodMayThrowException().
*/
$result = theMethodMayThrowException();
} catch (\GuzzleHttp\Exception\RequestException $e) {
/**
* Here we actually catch the instance of GuzzleHttp\Psr7\Response
* (find it in ./vendor/guzzlehttp/psr7/src/Response.php) with all
* its own and its 'Message' trait's methods. See more explanations below.
*
* So you can have: HTTP status code, message, headers and body.
* Just check the exception object has the response before.
*/
if ($e->hasResponse()) {
$response = $e->getResponse();
var_dump($response->getStatusCode()); // HTTP status code;
var_dump($response->getReasonPhrase()); // Response message;
var_dump((string) $response->getBody()); // Body, normally it is JSON;
var_dump(json_decode((string) $response->getBody())); // Body as the decoded JSON;
var_dump($response->getHeaders()); // Headers array;
var_dump($response->hasHeader('Content-Type')); // Is the header presented?
var_dump($response->getHeader('Content-Type')[0]); // Concrete header value;
}
}
// process $result etc. ...
Voila. Yanıt bilgilerini uygun şekilde ayrılmış öğeler halinde alırsınız.
Yan Notlar:
catch
Madde ile \Exception
, Guzzle özel istisnaları onu genişlettikçe miras zinciri PHP kök istisna sınıfını
yakalarız.
Bu yaklaşım, Laravel veya AWS API PHP SDK'da olduğu gibi Guzzle'ın başlık altında kullanıldığı kullanım durumları için yararlı olabilir, böylece gerçek Guzzle istisnasını yakalayamazsınız.
Bu durumda istisna sınıfı, Guzzle belgelerinde belirtilen sınıf olmayabilir (örn. GuzzleHttp\Exception\RequestException
için kök istisnası olarak).
Yani \Exception
bunun yerine yakalamalısınız, ancak bunun hala Guzzle istisna sınıfı örneği olduğunu unutmayın.
Dikkatli kullanılmasına rağmen. Bu sarmalayıcılar, Guzzle $e->getResponse()
nesnesinin gerçek yöntemlerini kullanılamaz hale getirebilir . Bu durumda, Guzzle kullanmak yerine sarmalayıcının gerçek istisna kaynak koduna bakmanız ve durum, mesaj vb. Nasıl alınacağını öğrenmeniz gerekecektir.$response
yöntemlerini .
Guzzle'ı doğrudan kendiniz ararsanız , kullanım durumunuzla ilgili olarak istisna belgelerindeGuzzleHttp\Exception\RequestException
belirtilen herhangi birini yakalayabilirsiniz .