Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

454
Views
¿Por qué no puedo acceder al contenido de la respuesta cuando el cliente HTTP de Symfony encuentra un error y, en su lugar, se lanza una excepción?

Quiero realizar una solicitud para recuperar la información del usuario del servidor OAUTH con Symfony HttpClient, pero no puedo obtener la respuesta directamente cuando encuentro una respuesta de error, porque el cliente genera una excepción.

Mi proveedor de usuario:

 public function loadUserByUsername($username) { try { $response = $this->httpClient->request( 'GET', $this->baseUrl . '/userinfo', [ 'headers' => [ 'Accept' => 'application/json', 'Content-Type' => 'application/json' ], 'auth_bearer' => $username ] ); var_dump($response->toArray());die; } catch (\Exception $e) { var_dump($e->getMessage());die; throw new UsernameNotFoundException($e->getMessage()); } }

Cuando llamo a $response->toArray() o $response->getContent() , se genera una excepción y aparece el siguiente mensaje de error en Postman

 <pre class='xdebug-var-dump' dir='ltr'> <small>/var/www/html/backend/src/Security/Provider/KeycloakUserProvider.php:50:</small><small>string</small> <font color='#cc0000'>'HTTP/2 401 returned for &quot;https://oauth_server/userinfo&quot;.'</font> <i>(length=127)</i> </pre>

Un ejemplo de la respuesta recibida en el navegador:

 {"error":"invalid_request","error_description":"Token not provided"}

¿Por qué no puedo acceder a la respuesta directamente llamando a $response->toArray() ?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Siempre que el código de estado de la respuesta no sea "bueno" (por ejemplo, en el rango 300-599), la respuesta se considera excepcional y se supone que debe manejarla.

Esto está claramente documentado aquí :

Cuando el código de estado HTTP de la respuesta está en el rango 300-599 (es decir, 3xx, 4xx o 5xx), los métodos getHeaders(), getContent() y toArray() lanzan una excepción apropiada, todos los cuales implementan HttpExceptionInterface.

Para excluirse de esta excepción y manejar los códigos de estado 300-599 por su cuenta, pase false como argumento opcional para cada llamada de esos métodos, por ejemplo, $response->getHeaders(false);.

Si no desea que el cliente genere una excepción cuando encuentre una respuesta incorrecta, debe pasar false a getContent() o toArray() .

P.ej

 $rawResponse = $response->getContents(false); $arrayResponse = $response->toArray(false);

No hay nada de malo en manejar la excepción explícitamente en su código y hará que su aplicación exprese mejor las condiciones que encuentra. Un "no bueno" debe tratarse como anómalo y manejarse en consecuencia.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!