Guzzle http не отправляет json запрос на сервер
Guzzlehttp 7.4
Воспроизведение проблемы:
composer init composer require guzzlehttp/guzzle touch test.php
test.php
<?php require 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('http://localhost:8000/dump.php', [
GuzzleHttp\RequestOptions::JSON => ['foo' => 'bar'] // or 'json' => [...]
]);
touch dump.php
dump.php
<?php
ob_start();
var_dump($_GET,$_POST);
$output = ob_get_clean();
file_put_contents('log.txt', $output,FILE_APPEND);
php -S localhost:8000
php test.php
Ожидаемый результат (согласно документации):
Получить в log.txt json запрос отправленный методом POST
Получаемый результат:
Запрос приходит, и тип запроса правильный
[Sat Nov 13 19:08:33 2021] PHP 7.4.3 Development Server (http://localhost:8000) started [Sat Nov 13 19:09:16 2021] 127.0.0.1:51972 Accepted [Sat Nov 13 19:09:16 2021] 127.0.0.1:51972 [200]: POST /dump.php [Sat Nov 13 19:09:16 2021] 127.0.0.1:51972 Closing
Но cat log.txt
array(0) {
}
array(0) {
}
Пустой, я не смог найти решение на сайтах, все из перечисленного не отправляет json в теле запроса. Можете сказать что я делаю не так?
Ответы (1 шт):
Считаю это отчасти потому что
Веб-сервер предназначен для помощи в разработке приложений. Он также может быть полезным в тестовых целях или для демонстрации приложения, запускаемого в полностью контролируемом окружении. Он не выполняет функции полноценного веб-сервера и не должен использоваться в общедоступных сетях.
Вы можете использовать php://input для получения содержимого запроса во встроенном (и других) сервере.
Комментарий говорит что $_POST используется для данных формы, в него нельзя передавать JSON/XML. Подтвердил это, передав данные через form_params в Guzzle как массив - данные появились в $_POST. Для получения JSON используйте php://input.