Guzzle 6 : 응답을위한 더 이상 json () 메소드
이전에 Guzzle 5.3에서 :
$response = $client->get('http://httpbin.org/get');
$array = $response->json(); // Yoohoo
var_dump($array[0]['origin']);
JSON 응답에서 PHP 배열을 쉽게 얻을 수 있습니다. 이제 Guzzle 6에서는 어떻게해야할지 모르겠습니다. json()
더 이상 방법 이없는 것 같습니다 . 최신 버전의 문서를 (빠르게) 읽고 JSON 응답에 대해 아무것도 찾지 못했습니다. 나는 무언가를 놓쳤다 고 생각합니다. 어쩌면 이해하지 못하는 새로운 개념이있을 수도 있습니다 (또는 아마도 올바르게 읽지 못했을 수도 있습니다).
이것이 (새로운 방법) 유일한 방법입니까?
$response = $client->get('http://httpbin.org/get');
$array = json_decode($response->getBody()->getContents(), true); // :'(
var_dump($array[0]['origin']);
아니면 도우미 또는 그런 것이 있습니까?
나는 json_decode($response->getBody())
대신에 지금 사용 $response->json()
합니다.
나는 이것이 PSR-7 준수의 희생자 일 것으로 생각합니다.
다음으로 전환하십시오.
json_decode($response->getBody(), true)
객체 대신 배열을 얻기 위해 이전과 동일하게 작동하려면 다른 주석 대신.
$response->getBody()->getContents()
응답에서 JSON을 얻는 데 사용 합니다. Guzzle 버전 6.3.0.
여전히 관심이 있다면 Guzzle 미들웨어 기능을 기반으로 한 내 해결 방법 은 다음과 같습니다.
HTTP 헤더로
JsonAwaraResponse
JSON 응답을 디코딩하는 작성Content-Type
-그렇지 않은 경우 표준 Guzzle 응답으로 작동합니다.<?php namespace GuzzleHttp\Psr7; class JsonAwareResponse extends Response { /** * Cache for performance * @var array */ private $json; public function getBody() { if ($this->json) { return $this->json; } // get parent Body stream $body = parent::getBody(); // if JSON HTTP header detected - then decode if (false !== strpos($this->getHeaderLine('Content-Type'), 'application/json')) { return $this->json = \json_decode($body, true); } return $body; } }
Guzzle PSR-7 응답을 위의 응답 구현으로 대체 할 미들웨어 를 작성하십시오 .
<?php $client = new \GuzzleHttp\Client(); /** @var HandlerStack $handler */ $handler = $client->getConfig('handler'); $handler->push(\GuzzleHttp\Middleware::mapResponse(function (\Psr\Http\Message\ResponseInterface $response) { return new \GuzzleHttp\Psr7\JsonAwareResponse( $response->getStatusCode(), $response->getHeaders(), $response->getBody(), $response->getProtocolVersion(), $response->getReasonPhrase() ); }), 'json_decode_middleware');
이 후 JSON을 PHP 기본 배열로 검색하려면 항상 Guzzle을 사용하십시오.
$jsonArray = $client->get('http://httpbin.org/headers')->getBody();
guzzlehttp / guzzle 6.3.3으로 테스트
추가하면 ->getContents()
jSON 응답이 반환되지 않고 대신 텍스트로 반환됩니다.
간단하게 사용할 수 있습니다 json_decode
참고 URL : https://stackoverflow.com/questions/30530172/guzzle-6-no-more-json-method-for-responses
'Programing' 카테고리의 다른 글
장고 클래스 기반 뷰에서 permission_required 데코레이터를 사용하는 방법 (0) | 2020.06.10 |
---|---|
ASP.NET MVC에서 View Model을 JSON 객체로 변환하는 방법은 무엇입니까? (0) | 2020.06.10 |
프로그래밍 방식으로 축소 또는 축소 축소 도구 모음 레이아웃 (0) | 2020.06.10 |
Clojure에 목록에 특정 값이 포함되어 있는지 테스트 (0) | 2020.06.09 |
팬더 데이터 프레임의 열을 반복하여 회귀를 실행하는 방법 (0) | 2020.06.09 |