Отправка почтовых данных через необработанный json с почтальоном
У меня есть почтальон (тот, который не открывается в Chrome), и я пытаюсь выполнить запрос на отправку с использованием необработанного json.
На вкладке "Тело" я выбрал "необработанный" и "JSON (приложение/json)" с этим телом:
{
"foo": "bar"
}
Для заголовка у меня есть 1, Content-Type: application/json
На стороне PHP я сейчас просто делаю print_r($_POST);
, и я получаю пустой массив.
Если я использую jQuery и делаю:
$.ajax({
"type": "POST",
"url": "/rest/index.php",
"data": {
"foo": "bar"
}
}).done(function (d) {
console.log(d);
});
Я получаю, как и ожидалось:
Array
(
[foo] => bar
)
Так почему же он не работает с Почтальон?
Скриншоты почтальона:
И заголовок:
4 answers
В отличие от jQuery
для чтения raw JSON
вам нужно будет декодировать его в PHP.
print_r(json_decode(file_get_contents("php://input"), true));
php://input
это поток только для чтения, который позволяет считывать необработанные данные из тела запроса.
$_POST
это переменные формы, вам нужно будет переключиться на form
радиокнопку в postman
, затем использовать:
foo=bar&foo2=bar2
Для публикации необработанного json
с jquery
:
$.ajax({
"url": "/rest/index.php",
'data': JSON.stringify({foo:'bar'}),
'type': 'POST',
'contentType': 'application/json'
});
Ответ Меды полностью законен, но когда я скопировал код, я получил ошибку!
Где-то в "php://input"
есть недопустимый символ (может быть, одна из кавычек?).
Когда я набрал код "php://input"
вручную, это сработало.
Мне потребовалось некоторое время, чтобы понять!
Я столкнулся с той же проблемой, следующий код работал для меня
$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);
Установите собственное приложение Postman, расширение Chrome устарело. (Мой открывался в собственном окне, но все еще работал как приложение Chrome)