Guzzlehttp - Guzzle 6의 응답 본문은 어떻게 얻을 수 있습니까?
회사에서 개발하고 있는 api에 대해 래퍼를 작성하려고 합니다.안심하고 Postman을 사용하여 다음과 같은 포스트 요청을 엔드포인트로 보낼 수 있습니다.http://subdomain.dev.myapi.com/api/v1/auth/
사용자 이름과 비밀번호를 POST 데이터로 지정하면 토큰이 반환됩니다.모두 예상대로 동작합니다.PHP에서 같은 작업을 시도하면 다시 한 번 수신됩니다.GuzzleHttp\Psr7\Response
우체국 요청에서처럼 토큰을 찾을 수 없는 것 같습니다.
관련 코드는 다음과 같습니다.
$client = new Client(['base_uri' => 'http://companysub.dev.myapi.com/']);
$response = $client->post('api/v1/auth/', [
'form_params' => [
'username' => $user,
'password' => $password
]
]);
var_dump($response); //or $resonse->getBody(), etc...
위의 코드 출력은 다음과 같습니다(경고, 텍스트 수신벽).
object(guzzlehttp\psr7\response)#36 (6) {
["reasonphrase":"guzzlehttp\psr7\response":private]=>
string(2) "ok"
["statuscode":"guzzlehttp\psr7\response":private]=>
int(200)
["headers":"guzzlehttp\psr7\response":private]=>
array(9) {
["connection"]=>
array(1) {
[0]=>
string(10) "keep-alive"
}
["server"]=>
array(1) {
[0]=>
string(15) "gunicorn/19.3.0"
}
["date"]=>
array(1) {
[0]=>
string(29) "sat, 30 may 2015 17:22:41 gmt"
}
["transfer-encoding"]=>
array(1) {
[0]=>
string(7) "chunked"
}
["content-type"]=>
array(1) {
[0]=>
string(16) "application/json"
}
["allow"]=>
array(1) {
[0]=>
string(13) "post, options"
}
["x-frame-options"]=>
array(1) {
[0]=>
string(10) "sameorigin"
}
["vary"]=>
array(1) {
[0]=>
string(12) "cookie, host"
}
["via"]=>
array(1) {
[0]=>
string(9) "1.1 vegur"
}
}
["headerlines":"guzzlehttp\psr7\response":private]=>
array(9) {
["connection"]=>
array(1) {
[0]=>
string(10) "keep-alive"
}
["server"]=>
array(1) {
[0]=>
string(15) "gunicorn/19.3.0"
}
["date"]=>
array(1) {
[0]=>
string(29) "sat, 30 may 2015 17:22:41 gmt"
}
["transfer-encoding"]=>
array(1) {
[0]=>
string(7) "chunked"
}
["content-type"]=>
array(1) {
[0]=>
string(16) "application/json"
}
["allow"]=>
array(1) {
[0]=>
string(13) "post, options"
}
["x-frame-options"]=>
array(1) {
[0]=>
string(10) "sameorigin"
}
["vary"]=>
array(1) {
[0]=>
string(12) "cookie, host"
}
["via"]=>
array(1) {
[0]=>
string(9) "1.1 vegur"
}
}
["protocol":"guzzlehttp\psr7\response":private]=>
string(3) "1.1"
["stream":"guzzlehttp\psr7\response":private]=>
object(guzzlehttp\psr7\stream)#27 (7) {
["stream":"guzzlehttp\psr7\stream":private]=>
resource(40) of type (stream)
["size":"guzzlehttp\psr7\stream":private]=>
null
["seekable":"guzzlehttp\psr7\stream":private]=>
bool(true)
["readable":"guzzlehttp\psr7\stream":private]=>
bool(true)
["writable":"guzzlehttp\psr7\stream":private]=>
bool(true)
["uri":"guzzlehttp\psr7\stream":private]=>
string(10) "php://temp"
["custommetadata":"guzzlehttp\psr7\stream":private]=>
array(0) {
}
}
}
Postman의 결과는 다음과 같습니다.
{
"data" : {
"token" "fasdfasf-asfasdfasdf-sfasfasf"
}
}
거즐에 있는 응답 오브젝트로 작업하는 것에 대해 뭔가 놓치고 있는 것이 분명합니다.Guzle 응답은 요청에 200 상태 코드를 표시하므로 반환된 데이터를 가져오려면 어떻게 해야 하는지 정확히 모르겠습니다.
거즐은 PSR-7을 실장한다.즉, 기본적으로는 PHP 임시 스트림을 사용하는 스트림에 메시지 본문을 저장합니다.모든 데이터를 검색하려면 주조 연산자를 사용할 수 있습니다.
$contents = (string) $response->getBody();
다음 방법으로도 할 수 있습니다.
$contents = $response->getBody()->getContents();
두 접근법의 차이점은getContents
나머지 내용을 반환하기 때문에 두 번째 콜은 에서 스트림의 위치를 찾지 않는 한 아무것도 반환하지 않습니다.rewind
또는seek
.
$stream = $response->getBody();
$contents = $stream->getContents(); // returns all the contents
$contents = $stream->getContents(); // empty string
$stream->rewind(); // Seek to the beginning
$contents = $stream->getContents(); // returns all the contents
대신 PHP의 문자열 캐스팅 작업을 사용하면 스트림의 처음부터 끝까지 모든 데이터를 읽습니다.
$contents = (string) $response->getBody(); // returns all the contents
$contents = (string) $response->getBody(); // returns all the contents
문서: http://docs.guzzlephp.org/en/latest/psr7.html#responses
JSON이 돌아올 것으로 예상되는 경우 가장 간단한 방법은 다음과 같습니다.
$data = json_decode($response->getBody()); // returns an object
// OR
$data = json_decode($response->getBody(), true); // returns an array
json_decode()
자동으로 몸을 던지다string
에 전화할 필요가 없습니다.getContents()
.
JSON 형식의 응답을 얻는 경우:
1.
$response = (string) $res->getBody();
$response =json_decode($response); // Using this you can access any key like below
$key_value = $response->key_name; //access key
$response = json_decode($res->getBody(),true);
$key_value = $response['key_name'];//access key
언급URL : https://stackoverflow.com/questions/30549226/guzzlehttp-how-get-the-body-of-a-response-from-guzzle-6
'programing' 카테고리의 다른 글
javax.annotation에서 @Nullable을 찾을 수 없습니다.* (0) | 2022.09.13 |
---|---|
MacOS 또는 OS X에 pip을 설치하는 방법 (0) | 2022.09.13 |
클라이언트에 JavaScript 파일을 강제로 새로 고치려면 어떻게 해야 합니까? (0) | 2022.09.13 |
JSON을 알파벳 순으로 첫 번째 문자로 정렬 (0) | 2022.09.13 |
MariaDB: 위도 및 경도 점의 원형 반지름이 다각형과 교차하는지 확인 (0) | 2022.09.13 |