переопределить rawBody перед парсингом JSON
-
- Сообщения: 536
- Зарегистрирован: 2016.09.05, 23:21
переопределить rawBody перед парсингом JSON
на сервер посылается не json а зашифрованный body из которого потом после расшифровки берется json какой метод мне надо переопределить и Request чтобы работало правильно?
-
- Сообщения: 536
- Зарегистрирован: 2016.09.05, 23:21
Re: переопределить rawBody перед парсингом JSON
если просто перехватывать rawData то пишет
Код: Выделить всё
Previous exception:
yii\web\HeadersAlreadySentException: Headers already sent in /var/www/zenit-api.local/vendor/symfony/var-dumper/Dumper/AbstractDumper.php on line 176. in /var/www/zenit-api.local/vendor/yiisoft/yii2/web/Response.php:367
Stack trace:
#0 /var/www/zenit-api.local/vendor/yiisoft/yii2/web/Response.php(340): yii\web\Response->sendHeaders()
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: переопределить rawBody перед парсингом JSON
Смотря как передаете, но смысл примерно такой
Код: Выделить всё
'components' => [
//...
'request' => [
//...
'on beforeRequest' => function ($event) {
$request = $event->sender->getRequest();
$encodedBody = $request->getRawBody();
$decodedBody = do_my_decoding($encodedBody);
$request->setRawBody($decodedBody);
}
]
]
-
- Сообщения: 536
- Зарегистрирован: 2016.09.05, 23:21
Re: переопределить rawBody перед парсингом JSON
спасибо, но данный метод не вызывается почему-то
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: переопределить rawBody перед парсингом JSON
Промахнулся немного, прямо на приложение вешайте обработчик события.
Код: Выделить всё
'components' => [
//...
'request' => [
//...
]
],
'on beforeRequest' => function ($event) {
$request = $event->sender->getRequest();
$encodedBody = $request->getRawBody();
$decodedBody = do_my_decoding($encodedBody);
$request->setRawBody($decodedBody);
}
-
- Сообщения: 536
- Зарегистрирован: 2016.09.05, 23:21
Re: переопределить rawBody перед парсингом JSON
Код: Выделить всё
public function decryptRequest(ApiTester $I)
{
$sslHandler = new SslSecurityHandler();
$data = json_encode(['key' => 'value']);
$headers = [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer manager_token'
];
codecept_debug($headers);
$client = new Client();
$response = $client->request('GET', 'http://127.0.0.1:8099/events', [
'headers' => $headers,
'post' => $sslHandler->encrypt($data)
]);
if ($response->getStatusCode() == 200) codecept_debug($sslHandler->decrypt($response->getBody()->getContents()));
}
Код: Выделить всё
[GuzzleHttp\Exception\ServerException] Server error: `GET http://127.0.0.1:8099/events` resulted in a `500 Internal Server Error` response:
\<pre>An Error occurred while handling another error:
yii\web\BadRequestHttpException: Invalid JSON data in request body: (truncated...)
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: переопределить rawBody перед парсингом JSON
Ну так вы его декодируете правильно? Дамп сделайте в on beforeRequest.
Хотя не, вам там нужно зашифрованные данные в json оборачивать, так не пропустит.
А может и пропустит, надо глянуть риквест, не помню точно как там.
Хотя не, вам там нужно зашифрованные данные в json оборачивать, так не пропустит.
А может и пропустит, надо глянуть риквест, не помню точно как там.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: переопределить rawBody перед парсингом JSON
Не, это в клиенте, оборачивайте в json
Код: Выделить всё
public function decryptRequest(ApiTester $I)
{
$sslHandler = new SslSecurityHandler();
$data = json_encode(['key' => 'value']);
$headers = [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer manager_token'
];
codecept_debug($headers);
$client = new Client();
$response = $client->request('GET', 'http://127.0.0.1:8099/events', [
'headers' => $headers,
'post' => json_encode(['data' => $sslHandler->encrypt($data)])
]);
if ($response->getStatusCode() == 200) codecept_debug($sslHandler->decrypt($response->getBody()->getContents()));
}
Код: Выделить всё
'on beforeRequest' => function ($event) {
$request = $event->sender->getRequest();
$encodedBody = json_decode($request->getRawBody(), true);
$decodedBody = do_my_decoding($encodedBody['data']);
$request->setRawBody($decodedBody);
}
-
- Сообщения: 536
- Зарегистрирован: 2016.09.05, 23:21