Postmanを使用してAPI呼び出しを行うと、JSONオブジェクトを受け取ります。これは私が期待していたものです。
ただし、Guzzleで次のように同じ電話をかけると、
$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
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: []
}
}
getBody()
はストリームを返します。すべてのコンテンツを一度に取得したい場合は、getContents()
メソッドを使用して、その間にjsonをデコードできます(必要な場合)。
$payload = json_decode($response->getBody()->getContents());
さらに読む- Guzzle Responses
$ response-> getBody()-> getContents()が機能しない場合は、以下を試してください。
$response->getBody()->__toString();
前述のように here の場合、getContentsのストリームポインターが既にストリームの最後にあり、空の応答を返しますが、デフォルトでは__toStringがリセットします。