When I use Postman to make an API call I receive a JSON object..which is what I expected.
However When I make same call with Guzzle like so:
$client = new GuzzleHttpClient(['base_uri' => 'https://api.dev/']); $response = $client->request('GET', 'search', [ 'verify' => false, ]); var_dump($response->getBody()); //null var_dump($response); //returns below
I get dump below from 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: [] } }
Advertisement
Answer
getBody()
returns a stream. If you want to get all the content at once you can use getContents()
method and decode json while at it (if you need to)
$payload = json_decode($response->getBody()->getContents());
Further reading – Guzzle Responses