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

问题描述 投票:1回答:2

我正在尝试从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
php laravel guzzle guzzle6
2个回答
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
投票

好的,所以我终于找到了这个问题。这是一个编码问题,所以代码实际上一直都是正确的。但是,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);
© www.soinside.com 2019 - 2024. All rights reserved.