2015-08-27 18 views
5

W projekcie Laravel muszę wywołać API REST, aby usunąć zdalne dane.Błąd Guzzle Curl nie catche przez instrukcję catch catch (Laravel)

Moim problemem jest to, że moje oświadczenie o złapaniu nie złapało Guzzle wyjątku, kiedy dostałem błąd. Mój kod jest następujący:

try { 
    $client = new \GuzzleHttp\Client(); 
    $request = $client->delete(Config::get('REST_API').'/order-product/'.$id); 
    $status = $request->getStatusCode(); 
} catch (Exception $e) { 
    var_dump($e);exit(); 
} 

Wyjątkiem jest przechwycony przez laravel ale nie w moim catch oświadczeniu. Wyjątkiem throwed przez chlać to:

GuzzleHttp\Ring\Exception\ConnectException 

To podniesiony w moim wierszu 3 skryptu i nie catched w moim skrypcie. Czy możesz dać mi sposób na złapanie wyjątku Guzzle?

powinien wskazywać, że już widział te posty ale nie dostać dobrą odpowiedź: How to resolve cURL Error (7): couldn't connect to host? i Catching cURL errors from Guzzle

Odpowiedz

2

Miałem podobny problem i rozwiązałem go przy użyciu następującej rzeczy. Użyłem twojego przykładu i dałem ci komentarze do zrozumienia.

try { 
    $client = new \GuzzleHttp\Client(); 
    $request = $client->delete(Config::get('REST_API').'/order-product/'.$id); 
    $status = $request->getStatusCode(); 
    if($status == 200){ 
     $response = $response->json(); 

    }else{ 
     // The server responded with some error. You can throw back your exception 
     // to the calling function or decide to handle it here 

     throw new \Exception('Failed'); 
    } 

} catch (\Guzzle\Http\Exception\ConnectException $e) { 
    //Catch the guzzle connection errors over here.These errors are something 
    // like the connection failed or some other network error 

    $response = json_encode((string)$e->getResponse()->getBody()); 
} 

Mam nadzieję, że to pomoże!

+0

Dzięki to działa! – jedema

2

Może to wyjątek nie jest rozszerzenie klasy Exception. Możesz spróbować złapać to jak:

try { 
    $client = new \GuzzleHttp\Client(); 
    $request = $client->delete(Config::get('REST_API').'/order-product/'.$id); 
    $status = $request->getStatusCode(); 
} catch (\GuzzleHttp\Ring\Exception\ConnectException $e) { 
    var_dump($e);exit(); 
} catch (Exception $e) { 
    // ... 
} 
+0

Przepraszam, ale już to wypróbowałem. Nie wiem, dlaczego to nie działa. – jedema

1

Prawdopodobnie chcesz złapać \Exception (w głównej przestrzeni nazw), dodając lewy ukośnik w oświadczeniu catch lub oświadczeniu use Exception.

0

Wystarczy Aktualizacja odpowiedź na nowym chlać wyjątków nazw

try { 
    $client = new \GuzzleHttp\Client(); 
    $request = $client->delete(Config::get('REST_API').'/order-product/'.$id); 
    $status = $request->getStatusCode(); 
} catch (\GuzzleHttp\Exception\ConnectException $e) { 
    var_dump($e);exit(); 
} 
5

on pracował ze mną, kiedy używany

\ GuzzleHttp \ Wyjątek \ ConnectException

zamiast

\ Guzzle \ Http \ Wyjątek \ ConnectException