Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

628
Vistas
Laravel - Correct way to catch cURL exceception

I am building a simple REST API package using cURL and would like to catch an error and then return a view. I am able to throw an error if I dd($e) but if I try and return a view it just continues with the code after the catch function. Shouldn't PHP kill the process and just go to the login view?

try{    
    $response = Http::timeout(2)->asForm()->post('https://' . $this->ip_address, [
        'username' => $this->username,
        'password' => $this->password
    ]);

} catch(\Illuminate\Http\Client\ConnectionException $e) {
    return view('auth.login');
}

If I get a cURL timeout exception I just want to go back to the login page for now. If I put in a bogus IP address obviously it will timeout after 2 seconds, which is what I am testing.

Using Laravel Http client, how can I catch that error and display the auth login view?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Unlike Guzzle, Laravel's HttpClient does not throw errors if the response is > 400.

You should simply use an if statement to check the response status code. See: https://laravel.com/docs/8.x/http-client#error-handling

You can call use the following checks:

// Determine if the status code is >= 200 and < 300...
$response->successful();

// Determine if the status code is >= 400...
$response->failed();

// Determine if the response has a 400 level status code...
$response->clientError();

// Determine if the response has a 500 level status code...
$response->serverError();

So in your case you can simply do something like this:

$response = Http::timeout(2)->asForm()->post('https://' . $this->ip_address, [
    'username' => $this->username,
    'password' => $this->password
]);

if ($response->failed()) {
    return view('your-view')->with([
        'message' => 'Failed.',
    ]);
}
over 4 years ago · Santiago Trujillo Denunciar

0

Could you try this please?

try {
    $response = Http::timeout(2)->asForm()->post('https://' . $this->ip_address, [
        'username' => $this->username,
        'password' => $this->password
    ]);
} catch(\Illuminate\Http\Client\ConnectionException $e) {
    return view('auth.login')->with('errorMessage', $e->getMessage());
}

And you can show the error on the frontend, like below;

@if(!empty($errorMessage))
  <div class="alert alert-danger"> {{ $errorMessage }}</div>
@endif
over 4 years ago · Santiago Trujillo Denunciar

0

It is better if you change your approach in using Laravel's HTTP client,

Move time-intensive tasks - like Http requests - to a job, and run that job in a background queue.

Then, for example, if you wanna use that Http request for authentication, handle your auth logic on that job, don't forget to log and handle exceptions.

afterward, protect your private routes using middlewares and make redirect unauthenticated users to your login page in that middleware.

I hope I could be clear

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda