Подтвердить что ты не робот

Ошибка чтения тела запроса HTTP из JSON POST в PHP

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

$request = json_decode(file_get_contents('php://input'));