Как получить json из post-запроса

179
07 августа 2021, 00:40

Есть 2 файла. Первый обращается ко второму методом post и передает json

$url = '/test.php';

$json = json_encode(['name' => 'Имя', 'phone' => '88000000000']);
$options = ['http' => [
    'method' => 'POST',
    'header' => 'Content-type:application/json',
    'content' => http_build_query($json)
]];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

А второй должен его принимать и записывать в файл. Но я не понимаю как во втором файле получить и обработать этот json? Пробую вот так, не получается:

$fd = fopen("result.txt", 'a') or die("не удалось создать файл");
$str = $_POST.PHP_EOL;
fwrite($fd, $str);
fclose($fd);

Массив $_POST пустой, а где тогда json?

Answer 1

в вызывающем файле во-первых укажите полный url с протоколом и хостом. Во-вторых, не надо использовать http_build_query, у вас же нет ассоциативного массива ключ-значение, который вы отправляете, а просто данные.

пример вызывающего

$url = 'http://test/test2.php';
$json = json_encode(['name' => 'Имя', 'phone' => '88000000000']);
$options = ['http' => [
    'method' => 'POST',
    'header' => 'Content-type:application/json',
    'content' => $json
]];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

echo $response;

в вызываемом используйте поток php://input для получения данных запроса. $_POST у вас пуст, поскольку опять таки у вас не было массива ключ-значение

$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
echo $data['name'];

при такой паре файлов в результате работы будет выведена строка Имя

READ ALSO
Выбор номера телефона из входящих вызовов

Выбор номера телефона из входящих вызовов

Есть метод с выбором контакта из списка контактов:

319
Динамическое создание фрагментов

Динамическое создание фрагментов

У меня появилась задача такого плана: Нужно создавать фрагменты в соответствие с количеством элементов, пришедших с сервераСкажем, я получил...

112
@Component-annotation Spring

@Component-annotation Spring

Для каких именно классов используется аннотация @Component?

228
Как протестировать данный метод?

Как протестировать данный метод?

Есть класс, методы которого необходимо протестироватьСобственно проблема: не могу правильно mock'нуть объекты тестируемого класса для покрытия...

265