Проблема с чтением тела HTTP-запроса из СООБЩЕНИЯ JSON в PHP


Я пишу сценарий, который зарегистрирован как конечная точка для веб-крючка. Я знаю, что он успешно зарегистрирован, потому что я записываю заголовок каждого запроса в журналы своего сервера. Вот пример:

Content-Type: text/xml; charset=UTF-8
User-Agent: Jakarta Commons-HttpClient/3.1
Host: =={obfuscated}== 
Content-Length: 1918

API, с помощью которого я зарегистрировался, отправляет объект JSON в мой скрипт, и я хотел бы проанализировать этот объект с помощью PHP. Как вы можете видеть из заголовка запроса, есть хороший большой толстый объект JSON, ожидающий анализа. Это кажется простым, но это не так.

Сначала я попытался использовать $_POST['json'] или просто $_POST, но поскольку данные не находятся в массиве, я не был уверен, как получить к ним такой доступ.

Я пробовал использовать file_get_contents('php://input') и fopen('php://input', 'r') с json_decode() и без json_decode(), но безуспешно. Я не могу использовать http_get_request_body(), так как на сервере, на котором я нахожусь, нет PECL, и это выходит из-под моего контроля.

Существуют ли какие-либо другие способы взаимодействия с объектом JSON ПОСЛЕ редактирования, которые мне не хватает? Спасибо!

Author: Hartley Brody, 2011-08-13

2 answers

Спасибо другим за вклад. Оказывается, мне просто нужно было

$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE); //convert JSON into array

Где второй параметр в json_decode возвращает объект в виде массива.

Надеюсь, это поможет кому-то еще!

 117
Author: Hartley Brody, 2016-10-07 12:03:49

Даже если работает следующее.

$inputJSON = file_get_contents('php://input');

Если вы хотите продолжить использовать $_POST, отправьте данные в виде FormData

var fd = new FormData();
fd.append('key', 'value');
return axios.post('url', fd)
 0
Author: Exequiel Aguirre, 2018-09-28 20:46:26