J'ai Postman (celui qui ne s'ouvre pas dans Chrome) et j'essaie de faire une demande POST en utilisant raw json.
Dans l'onglet Corps, j'ai sélectionné "brut" et "JSON (application/json)" avec ce corps:
{
"foo": "bar"
}
Pour l'en-tête, j'ai 1, Content-Type: application/json
Du côté PHP, je ne fais que print_r($_POST);
pour l'instant, et je reçois un tableau vide.
Si j'utilise jQuery et que je fais:
$.ajax({
"type": "POST",
"url": "/rest/index.php",
"data": {
"foo": "bar"
}
}).done(function (d) {
console.log(d);
});
Je reçois comme prévu:
Array
(
[foo] => bar
)
Alors pourquoi ne travaille-t-il pas avec Postman?
Postman captures d'écran:
et en-tête:
À la différence de jQuery
pour lire JSON
brut, vous devrez le décoder en PHP.
print_r(json_decode(file_get_contents("php://input"), true));
php://input
est un flux en lecture seule qui vous permet de lire des données brutes à partir du corps de la demande.
$_POST
étant des variables de forme, vous devrez passer à form
radiobutton dans postman
, puis utiliser:
foo=bar&foo2=bar2
Pour poster json
brut avec jquery
:
$.ajax({
"url": "/rest/index.php",
'data': JSON.stringify({foo:'bar'}),
'type': 'POST',
'contentType': 'application/json'
});
la réponse de meda est tout à fait légitime, mais lorsque j'ai copié le code, une erreur s'est produite!
Quelque part dans le "php://input"
il y a un caractère invalide (peut-être une des guillemets?).
Quand j'ai tapé le code "php://input"
manuellement, cela a fonctionné . Il m'a fallu un certain temps pour comprendre!
Je faisais face au même problème, le code suivant a fonctionné pour moi:
$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);
Installer l'application native Postman, l'extension Chrome est obsolète .