как отправить json запрос в slim'е

123
11 сентября 2019, 23:30

Есть рабочий запрос к api:

curl -X "POST" "http://localhost:8081/oauth/auth" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    --data '{"grant_type":"password", "client_id":"app", "client_secret":"", "username":"oauth@example.com", "password":"password"}'

Пытаюсь отправить его в тестах. Делаю вот так:

use Zend\Diactoros\Stream;
use Zend\Diactoros\Response;
use Zend\Diactoros\ServerRequest;
use Slim\App;
$body = new Stream('php://temp', 'r+');
$body->write(json_encode($params));
$body->rewind();
$request = (new ServerRequest())
        ->withHeader('Content-Type', 'application/json')
        ->withHeader('Accept', 'application/json')
        ->withUri(new Uri($uri))
        ->withMethod($method)
        ->withBody($body);
$container = $this->container();
$app = new App($container);
(require 'config/routes.php')($app, $container);
$responce = $app->process($request, new Response());
$responce->getBody()->rewind();

в ответ приходит эксепшен, что не распарсился параметр grant_type

Answer 1

Метод withBody() не влияет на результат метода getParsedBody(), а коде обработчика скорее всего используется именно метод $request->getParsedBody().

Попробуйте при инициализации объекта запроса установить значение распарсенного тела.

<?php
$request = (new ServerRequest())
        ->withHeader('Content-Type', 'application/json')
        ->withHeader('Accept', 'application/json')
        ->withUri(new Uri($uri))
        ->withMethod($method)
        ->withBody($body)
        ->withParsedBody($params);
READ ALSO
Блокировки данных в InnoDB

Блокировки данных в InnoDB

Есть 2 таблицы: пользователи (user) и телефоны (phone)При добавлении нового пользователя (ввод номера телефона) проверяется, нет ли такого номера...

153
Запись данных в открытый Excel файл с помощью COM OLE C++

Запись данных в открытый Excel файл с помощью COM OLE C++

Подскажите пожалуйста, есть ли у кого пример кода чтения и записи данных из/в открытый ексель файл с помощью COM/OLE на чистом С++

118
Удаление папок Windows Kits

Удаление папок Windows Kits

Столкнулся с интересным вопросом, причем ничего явно отвечающего на него в интернете не нашелСобственно, есть папка Program Files (x86)\Windows Kits/10/Include...

136