meaning guzzlehttp example docs debug php guzzle

php - docs - guzzlehttp client example



Guzzle 6: no más método json() para respuestas (5)

Ahora uso json_decode($response->getBody()) lugar de $response->json() .

Sospecho que esto podría ser una víctima del cumplimiento de PSR-7.

Anteriormente en Guzzle 5.3:

$response = $client->get(''http://httpbin.org/get''); $array = $response->json(); // Yoohoo var_dump($array[0][''origin'']);

Podría obtener fácilmente una matriz PHP a partir de una respuesta JSON. Ahora en Guzzle 6, no sé cómo hacerlo. Parece que ya no hay método json() . Leí (rápidamente) el documento de la última versión y no encontré nada sobre las respuestas JSON. Creo que me perdí algo, tal vez hay un nuevo concepto que no entiendo (o tal vez no lo leí correctamente).

¿Es esta (abajo) nueva forma la única forma?

$response = $client->get(''http://httpbin.org/get''); $array = json_decode($response->getBody()->getContents(), true); // :''( var_dump($array[0][''origin'']);

¿O hay un ayudante o algo así?


Al agregar ->getContents() no se devuelve la respuesta jSON, sino que se devuelve como texto.

Simplemente puede usar json_decode


Cambias a:

json_decode($response->getBody(), true)

En lugar del otro comentario, si desea que funcione exactamente como antes para obtener matrices en lugar de objetos.


Si todavía están interesados, aquí está mi solución basada en la función de middleware Guzzle:

  1. Cree JsonAwaraResponse que decodificará la respuesta JSON por el encabezado HTTP Content-Type , si no, actuará como respuesta estándar de Guzzle:

    <?php namespace GuzzleHttp/Psr7; class JsonAwareResponse extends Response { /** * Cache for performance * @var array */ private $json; public function getBody() { if ($this->json) { return $this->json; } // get parent Body stream $body = parent::getBody(); // if JSON HTTP header detected - then decode if (false !== strpos($this->getHeaderLine(''Content-Type''), ''application/json'')) { return $this->json = /json_decode($body, true); } return $body; } }

  2. Cree middleware que reemplazará las respuestas de Guzzle PSR-7 con la implementación de Respuesta anterior:

    <?php $client = new /GuzzleHttp/Client(); /** @var HandlerStack $handler */ $handler = $client->getConfig(''handler''); $handler->push(/GuzzleHttp/Middleware::mapResponse(function (/Psr/Http/Message/ResponseInterface $response) { return new /GuzzleHttp/Psr7/JsonAwareResponse( $response->getStatusCode(), $response->getHeaders(), $response->getBody(), $response->getProtocolVersion(), $response->getReasonPhrase() ); }), ''json_decode_middleware'');

Después de esto para recuperar JSON como matriz nativa de PHP, use Guzzle como siempre:

$jsonArray = $client->get(''http://httpbin.org/headers'')->getBody();

Probado con guzzlehttp / guzzle 6.3.3


Uso $response->getBody()->getContents() para obtener JSON de la respuesta. Guzzle versión 6.3.0.