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

453
Vistas
¿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 Respuestas
Responde la pregunta

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 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