Ошибка чтения тела HTTP-запроса из JSON POST в PHP - PullRequest
47 голосов
/ 13 августа 2011

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

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

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

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

Iпробовал использовать file_get_contents('php://input') и fopen('php://input', 'r') с * 1012 и без *, но не повезло.Я не могу использовать http_get_request_body(), поскольку сервер, на котором я работаю, не имеет PECL, и это вне моего контроля.

Существуют ли другие способы взаимодействия с POST-ed-объектом JSON, которые я 'м отсутствует?Спасибо!

Ответы [ 2 ]

131 голосов
/ 17 августа 2011

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

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

где второй параметр в json_decode вернул объект в виде массива.

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

0 голосов
/ 28 сентября 2018

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

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

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

var fd = new FormData();
fd.append('key', 'value');
return axios.post('url', fd)
...