Почему мой вызов Guzzle 6 get () возвращает пустой поток? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь прочитать JSON из API, но по какой-то причине 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 голосов
/ 04 сентября 2018

Хорошо, так что я наконец нашел проблему. Это была проблема с кодировкой, поэтому код всегда был правильным. Однако 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);
0 голосов
/ 04 сентября 2018

Я вполне уверен, что с Streams вы можете получить данные только один раз. Итак, когда вы выводите второй вызов $response->getBody()->getContents(), он возвращает ноль.

Вместо этого попробуйте следующее:

$client = new Client();
$response = $client->request('GET', 'https://etjanster.intra.regionhalland.se/api/v1/getpopularflows/2/json');
dd(json_decode($response->getBody()->getContents()));

И посмотри, какой у тебя выход ...

...