我正在尝试从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
我很相信使用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()));
看看你的输出是什么......
好的,所以我终于找到了这个问题。这是一个编码问题,所以代码实际上一直都是正确的。但是,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);