Как получить ответ о статусе HTTP от ответа GuzzleHttp по php Laravel? - PullRequest
0 голосов
/ 29 апреля 2019

Развиваюсь на php Laravel.Я получил ответ GuzzleHttp от Mailgun как Object и не могу получить от него статус.

Объект:

O:8:"stdClass":2:{s:18:"http_response_body";O:8:"stdClass":2:{s:6:"member";O:8:"stdClass":4:{s:7:"address";s:24:"test_of_json-4@zapara.fr";s:4:"name";s:10:"not filled";s:10:"subscribed";b:1;s:4:"vars";O:8:"stdClass":0:{}}s:7:"message";s:36:"Mailing list member has been created";}s:18:"http_response_code";i:200;}

Мне нужна только последняя пара данных:

"http_response_code";i:200;

, чтобы получить ее в переменную, например: $http_response_code = 200; или даже просто ее значение.

Чтобы получить строку, как я цитировал выше, я использую

$result_ser = serialize($result);

но пока не могу извлечь значение переменной.

Также я пробовал это: $this->resultString .= \GuzzleHttp\json_decode($result_ser, true); и получаю ошибку.

Пожалуйста,объясните мне, Как получить / извлечь нужное мне значение?

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Для получения кода состояния ответа вы можете использовать функцию getStatusCode :

$response = $client->request();

$statusCode = $response->getStatusCode();

пока вы получите тело ответа, вы можете использовать:

$contents = $response->getBody()->getContents();
0 голосов
/ 01 мая 2019

Я обнаружил, что пакет 'mailgun / mailgun' использует свой собственный HTTP-клиент, который также использует RestClient, и эти классы возвращают stdObject.

В этом объекте есть свойство 'http_response_code', содержащее код ответа HTTP, например200, 400, 401 и т. Д.

Это свойство доступно стандартным способом $object->property, и в данном случае это решение моего запроса.

Для всех, кто будет читатьНа этот вопрос и ответы я должен объяснить одну вещь, которую я не прояснил в вопросе.

Я сделал запрос к API Mailgun для подписки участника на список рассылки.API возвращает stdObject, а не данные JSON или XML.

Но есть и еще одна странная вещь - stdObject возвращается только при успешном выполнении запроса.Если запрос не удастся, вы получите только Exception с сообщением и без кода.Это вынудило меня, в случае неудачи, проанализировать тело сообщения вместо получения и устранения кода ошибки.

0 голосов
/ 29 апреля 2019

давайте рассмотрим ваш запрос что-то вроде

 $response = $client->get("https://example.com");
 if ( $object_res->getStatusCode() == 200 ) { // here you are checking your http status code
 }

$object_res->getStatusCode() - метод получения кода состояния http.

см. документы , на этой странице приведен простой пример.

...