为什么我的Guzzle 6 get()调用返回空流?

时间:2018-09-04 09:06:32

标签: php laravel guzzle guzzle6

我正在尝试从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

2 个答案:

答案 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);