#php #guzzle
#php #guzzle
Вопрос:
У меня есть запрос post, который не может прочитать мой $json_body. Это дает мне такую ошибку;
Fatal error: Call to a member function getBody() on null
Я проверяю свои переменные, и у них есть значение, но как только оно переходит к post-запросу, оно становится нулевым.
$signature = hash_hmac('sha256', $payload, utf8_encode(API_KEY));
$client = new GuzzleHttpClient();
$response = $client->request('POST', $url, [
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'ACCESS_SIGNATURE' => $signature,
'ACCESS_KEY' => API_KEY,
'ACCESS_NONCE' => $nonce,
'ACCESS_TIMESTAMP' => $timestamp,
],
'body' => $json_body
]);
var_dump($response->getBody()->getContents());die();
Это ошибка от guzzle? Не уверен. Пожалуйста, помогите, пытался искать ответы, но все равно получил то же самое.
Комментарии:
1. вы пробовали выполнить этот запрос с помощью postman?
2. На самом деле я использую Insomnia для. Это одно и то же, верно? все еще дает мне
Fatal error: Call to a member function getBody() on null
3. У меня нет опыта борьбы с бессонницей. По сути, вам нужно проверить, возвращает ли конечная точка что-либо. Могут быть ситуации, когда запросы заканчиваются в середине выполнения, не возвращая никаких заголовков. Тогда ответ guzzle будет нулевым, потому что в нем недостаточно информации, чтобы вернуть даже ошибку
4. вы не получаете никакого ответа, это может быть связано с кодом ответа, попробуйте проверить, равен ли statuscode 200 или 201, затем используйте getBody(),
if($response->getStatusCode() == 200){$response->getBody()->getContents()}
5. также бессонница, почтальон любого расширения Chrome для отправки http-запросов все одинаковы
Ответ №1:
Если $response сообщается как null
это означает, что ваш запрос POST определенно не удался. Это может означать либо проблему с сетью, либо ответ конечной точки API с ошибкой уровня 4xx или 5xx.
Чтобы справиться с этим, вы должны обернуть свой запрос в попытку…Блок перехвата. Вот как я это делаю…
use GuzzleHttpExceptionRequestException;
$guzClient = new GuzzleHttpClient();
$params = ["headers" => [...], "body" => $json_body];
try {
$req = $guzClient->request("POST", $url, $params);
} catch(RequestException $e) {
// you can use $e to get more details on the failure. Ex- $e->getCode() returns the error code assigned by Guzzle to the exception.
$req = $e->getResponse();
}
var_dump($req->getBody());
Вы можете захватить еще более конкретные исключения, заменив RequestException этими конкретными именами классов или добавив больше блоков Catch. Пожалуйста, ознакомьтесь с документацией Guzzle здесь.
РЕДАКТИРОВАТЬ: добавлена строка сверху, чтобы использовать пространство имен RequestException.
Комментарии:
1. никогда не слышал, чтобы вызывалась функция
getCode()
, вы имеете в видуgetStatusCode()
2. Нет. Я имею в виду getCode() . Это метод в любом метаемом объекте в PHP.
3. Ооо! Теперь я помню, все в порядке, мое плохое вылетело из головы
4. Привет, извините за поздний ответ. Я попробовал это и получил ту же ошибку, неопределенная переменная, которая является getBody() .
5. привет, это решено. спасибо за вашу помощь.