PHP: как получить POST JSON

PHP: как получить POST JSON

От автора: когда я работал в Mozilla, мне нужно было написать транзакцию аутентификации типа OAuth между Bugzilla и Phabricator. Эта задача вынудила меня вернуться в мир PHP, к языку, который я давно не использую (с версии ~5.2). С помощью PHP я только создаю темы и плагины на WP для своего блога. Возврат к языку, который не практиковался годами, кажется чем-то совершенно новым. Начинаешь замечать шаблоны и методы, о которых и не догадывался раньше.

Где-то в транзакции аутентификации Phabricator должен был получать POST-запрос с JSON. Я думал, что данные окажутся в глобальном массиве $_POST, однако переменная была пуста. И как же мне получить POST-данные? Получить POST JSON в PHP можно с помощью следующих строк:

# Получить JSON как строку
$json_str = file_get_contents('php://input');

# Получить объект
$json_obj = json_decode($json_str);

Раньше я думал, что функция file_get_contents умеет вытягивать контент только из локальных файлов и URL’ов. Однако с помощью специального адреса php://input с ее помощью можно получать JSON-данные в виде строки. Для перевода JSON-строки в рабочий объект/массив можно использовать json_decode.

В принципе, понятно, почему JSON не обрабатывается в $_POST, у него ведь нет ключа. Нам нужно просто получить данные, а сделать это можно с помощью php://input. Можете проверить обработку JSON+POST в cURL.

Автор: David Walsh

Источник: https://davidwalsh.name/

Редакция: Команда webformyself.

Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Курс по программированию на языке PHP

Изучите PHP с нуля до результата!

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (1)

  1. r0ma

    На днях получал/отправлял PUT подобным образом.
    В комментариях к официальной документации нашел аналогичный прием.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree