Guzzle не считывает основное значение

#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. привет, это решено. спасибо за вашу помощь.