我正在尝试从API读取JSON,但是由于某些原因,Guzzle返回了一个空对象。为什么? :)
$client = new Client();
$response = $client->request('GET', 'https://etjanster.intra.regionhalland.se/api/v1/getpopularflows/2/json');
$data = json_decode($response->getBody()->getContents());
dd($response,$response->getBody(), $response->getBody()->getContents(), $data);
dd()打印出以下内容:
Response {#1532 ▼
-reasonPhrase: "OK"
-statusCode: 200
-headers: array:6 [▶]
-headerNames: array:6 [▶]
-protocol: "1.1"
-stream: Stream {#1530 ▶}
}
Stream {#1530 ▼
-stream: stream resource @16 ▶}
-size: null
-seekable: true
-readable: true
-writable: true
-uri: "php://temp"
-customMetadata: []
}
""
null
答案 0 :(得分:1)
我非常确定,使用Streams只能检索一次数据。因此,当您向$response->getBody()->getContents()
输出第二个调用时,它将返回null。
相反,请尝试以下操作:
$client = new Client();
$response = $client->request('GET', 'https://etjanster.intra.regionhalland.se/api/v1/getpopularflows/2/json');
dd(json_decode($response->getBody()->getContents()));
看看您的输出是什么...
答案 1 :(得分:1)
好的,所以我终于找到了问题。这是一个编码问题,因此代码一直以来都是正确的。但是,Guzzle无法处理windows-1252
编码,因此我执行了以下操作来解决我的问题,但感觉像是黑客:
$response = $client->request('GET', 'https://etjanster.regionhalland.se/api/v1/getpopularflows/5/json', $headers);
$string = $response->getBody()->getContents();
$string = iconv("ISO-8859-1","UTF-8",$string);
$string = json_decode((string) $string, true);