От автора: когда я работал в Mozilla, мне нужно было написать транзакцию аутентификации типа OAuth между Bugzilla и Phabricator. Эта задача вынудила меня вернуться в мир PHP, к языку, который я давно не использую (с версии ~5.2). С помощью PHP я только создаю темы и плагины на WP для своего блога. Возврат к языку, который не практиковался годами, кажется чем-то совершенно новым. Начинаешь замечать шаблоны и методы, о которых и не догадывался раньше.
Где-то в транзакции аутентификации Phabricator должен был получать POST-запрос с JSON. Я думал, что данные окажутся в глобальном массиве $_POST, однако переменная была пуста. И как же мне получить POST-данные? Получить POST JSON в PHP можно с помощью следующих строк:
1 2 3 4 5 |
# Получить 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
Источник: //davidwalsh.name/
Редакция: Команда webformyself.
Комментарии (1)