web-dev-qa-db-fra.com

Guzzle retourne le corps vide au lieu du corps json

Lorsque j'utilise Postman pour effectuer un appel API, je reçois un objet JSON..qui correspond à ce que j'attendais . enter image description here

Cependant, quand je fais le même appel avec Guzzle comme ceci:

$client = new \GuzzleHttp\Client(['base_uri' => 'https://api.dev/']);

$response = $client->request('GET', 'search', [
    'verify' => false,
]);

var_dump($response->getBody()); //null

var_dump($response); //returns below

Je reçois le vidage ci-dessous de Guzzle

Response {#304 ▼
  -reasonPhrase: "OK"
  -statusCode: 200
  -headers: array:8 [▼
    "Server" => array:1 [▶]
    "Content-Type" => array:1 [▼
      0 => "application/json"
    ]
    "Transfer-Encoding" => array:1 [▶]
    "Connection" => array:1 [▶]
    "Cache-Control" => array:1 [▶]
    "Date" => array:1 [▶]
    "X-RateLimit-Limit" => array:1 [▶]
    "X-RateLimit-Remaining" => array:1 [▶]
  ]
  -headerNames: array:8 [▼
    "server" => "Server"
    "content-type" => "Content-Type"
    "transfer-encoding" => "Transfer-Encoding"
    "connection" => "Connection"
    "cache-control" => "Cache-Control"
    "date" => "Date"
    "x-ratelimit-limit" => "X-RateLimit-Limit"
    "x-ratelimit-remaining" => "X-RateLimit-Remaining"
  ]
  -protocol: "1.1"
  -stream: Stream {#302 ▼
    -stream: stream resource @15 ▼
      wrapper_type: "PHP"
      stream_type: "TEMP"
      mode: "w+b"
      unread_bytes: 0
      seekable: true
      uri: "php://temp"
      options: []
    }
    -size: null
    -seekable: true
    -readable: true
    -writable: true
    -uri: "php://temp"
    -customMetadata: []
  }
}
14
Emeka Mbah

getBody() renvoie un flux. Si vous voulez obtenir tout le contenu en même temps, vous pouvez utiliser la méthode getContents() et décoder json pendant que vous y êtes (si vous en avez besoin)

$payload = json_decode($response->getBody()->getContents());

Lectures complémentaires - Guzzle Responses

41
peterm

Si $ response-> getBody () -> getContents () ne fonctionne pas pour vous, essayez:

$response->getBody()->__toString();

Comme mentionné ici , le pointeur de flux de getContents est parfois déjà à la fin du flux, puis il renvoie une réponse vide, mais __toString le réinitialise par défaut.

0
Milan Markovic