PHP не получает ожидаемого ответа Guzzle

Я использую Guzzle для HTTP-запросов / ответов в моем проекте PHP.

Отправляю следующий запрос:

GET https://graph.microsoft.com/v1.0/me/events('[some_id]')

который в Postman возвращает что-то вроде этого:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('...')/events/$entity",
    "@odata.etag": "W/\"...==\"",
    "id": "...",
    "createdDateTime": "2018-06-14T08:03:44.5688916Z",
    "lastModifiedDateTime": "2018-06-14T08:03:44.7407671Z",
    "changeKey": "...==",
    "categories": [],
    "originalStartTimeZone": "UTC",
    "originalEndTimeZone": "UTC",
    "iCalUId": "...",
    "reminderMinutesBeforeStart": 15,
    "isReminderOn": true,
    "hasAttachments": false,
    "subject": "Created ?",
    "bodyPreview": "",
    "importance": "normal",
    "sensitivity": "normal",
    "isAllDay": false,
    "isCancelled": false,
    "isOrganizer": true,
    "responseRequested": true,
    "seriesMasterId": null,
    "showAs": "busy",
    "type": "singleInstance",
    "webLink": "https://outlook.office365.com/owa/?itemid=...%3D&exvsurl=1&path=/calendar/item",
    "onlineMeetingUrl": null,
    "recurrence": null,
    "responseStatus": {
        "response": "organizer",
        "time": "0001-01-01T00:00:00Z"
    },
    "body": {
        "contentType": "html",
        "content": ""
    },
    "start": {
        "dateTime": "2018-06-15T10:00:00.0000000",
        "timeZone": "UTC"
    },
    "end": {
        "dateTime": "2018-06-15T13:30:00.0000000",
        "timeZone": "UTC"
    },
    "location": {
        "displayName": "",
        "locationType": "default",
        "uniqueIdType": "unknown",
        "address": {},
        "coordinates": {}
    },
    "locations": [],
    "attendees": [],
    "organizer": {
        "emailAddress": {
            "name": "...",
            "address": "..."
        }
    }
}

Итак, я строю свой запрос так:

$client = new Client();

$header = array(
                "Authorization" => "Bearer ".$token
);

$url = "https://graph.microsoft.com/v1.0/me/events('" .$idEvent. "')";

$request = new Request("GET", $url, $header, "");

try {
     $eventInfos = $client->send($request);
}
catch (GuzzleException $e) {
     var_dump($e->getMessage());
}

Но когда я использую var_dump ($ eventInfos), я получаю объект GuzzleHttp \ Psr7 \ Request.

Как правильно получить JSON, которого я ожидал, пожалуйста?


person Tibo    schedule 14.06.2018    source источник
comment
попробуйте $eventInfos->getBody()   -  person Abhishek    schedule 14.06.2018
comment
в блоке try распечатать $eventInfos->getBody() после отправки запроса   -  person Alex Andrei    schedule 14.06.2018
comment
Спасибо за ответ Алекс, я ответил Абхишеку в комментарии ниже :)   -  person Tibo    schedule 14.06.2018


Ответы (2)


Вы должны извлечь тело из ответа. Попробуй это,

$client = new Client();

$header = array(
                "Authorization" => "Bearer ".$token
);

$url = "https://graph.microsoft.com/v1.0/me/events('" .$idEvent. "')";

$request = new Request("GET", $url, $header, "");

try {
     $eventInfos = $client->send($request);
     $response = (string)$eventInfos->getBody();
}
catch (GuzzleException $e) {
     var_dump($e->getMessage());
}
person Abhishek    schedule 14.06.2018
comment
Спасибо за Ваш ответ ! Но я уже пробовал это и получаю следующее: object (GuzzleHttp \ Psr7 \ Stream) # 1960 (7) {[stream: GuzzleHttp \ Psr7 \ Stream: private] = ›resource (1609) of type (stream) [size : GuzzleHttp \ Psr7 \ Stream: private] = ›NULL [доступно для поиска: GuzzleHttp \ Psr7 \ Stream: private] =› bool (true) [читается: GuzzleHttp \ Psr7 \ Stream: private] = ›bool (true) [доступно для записи: GuzzleHttp \ Psr7 \ Stream: private] = ›bool (true) [uri: GuzzleHttp \ Psr7 \ Stream: private] =› string (10) php: // temp [customMetadata: GuzzleHttp \ Psr7 \ Stream: private] = ›array ( 0) {}} - person Tibo; 14.06.2018
comment
@ThibautTang обновил ответ, Guzzle хранит тело ответа в Stream, поэтому вам нужно привести его к строке - person Abhishek; 14.06.2018
comment
Работает с (строковым) приведением! Большое тебе спасибо :) - person Tibo; 14.06.2018
comment
@ThibautTang Отлично !! Просто примите ответ и счастливого кодирования - person Abhishek; 14.06.2018
comment
Привет, @ThibautTang, ты все еще можешь это сделать json_decode($res->getBody()->getContents(),true) - person Ulrich Dohou; 14.06.2018

Кроме того, вы можете использовать getContents(), чтобы получить ответ.

$request->getBody()->getContents()
person Mostafa Soufi    schedule 26.09.2019