124 votes

Envoyer des données POST via JSON brut avec Postman

J'ai Postman (celui qui ne s'ouvre pas dans Chrome) et j'essaie de faire une requête POST en utilisant du JSON brut.

Dans l'onglet Corps, j'ai sélectionné "raw" et "JSON (application/json)" avec ce corps :

{
    "foo": "bar"
}

Pour l'en-tête, j'ai 1, Content-Type: application/json

Du côté de PHP, je fais juste print_r($_POST); pour l'instant, et j'obtiens un tableau vide.


Si j'utilise jQuery et 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 ça ne marche pas avec Postman ?


Captures d'écran de Postman :

enter image description here

et l'en-tête :

enter image description here

0 votes

Essayez de remplacer $_REQUEST par $_POST et var_dump() par print_r().

0 votes

@Deep je reçois array(1) {["foo"]=> string(3) "bar"} avec jQuery et toujours un tableau vide avec Postman : array(0) {}

0 votes

Donc le facteur n'envoie pas de demande

56voto

Itachi Points 403

Il suffit de cocher l'option JSON dans la liste déroulante à côté de binaire ; lorsque vous cliquez sur raw. Cela devrait faire

skill synon pass json to postman

6 votes

Il s'agit d'un poste assez ancien mais si vous regardez la question, vous verrez que c'est exactement ce que j'ai fait. vous voudrez peut-être lire la question, la réponse sélectionnée et les commentaires sur la réponse sélectionnée pour mieux comprendre le problème et la solution.

2 votes

Bien sûr, mais cela a permis d'identifier le problème que j'avais ; j'avais sélectionné "Text", et non pas application/json, même si cela était déjà mentionné dans la section Headers. C'est déroutant ; si vous choisissez "Text", alors le "code" HTTP POST complet est affiché, y compris le JSON, ce qui devrait fonctionner, puisque c'est un appel POST complet, pas seulement le JSON.

43voto

meda Points 11955

Contrairement à jQuery afin de lire les données brutes JSON 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 les données brutes du corps de la requête.

$_POST sont des variables de formulaire, vous devrez passer à form bouton radio dans postman alors utilisez :

foo=bar&foo2=bar2

Pour afficher des données brutes json con jquery :

$.ajax({
    "url": "/rest/index.php",
    'data': JSON.stringify({foo:'bar'}),
    'type': 'POST',
    'contentType': 'application/json'
});

0 votes

Oui, en effet, les variables post json et post sont différentes.

8voto

CoredusK Points 311

La réponse de meda est tout à fait légitime, mais quand j'ai copié le code, j'ai eu une erreur !

Quelque part dans le "php://input" il y a un caractère non valide (peut-être un des guillemets ?).

Quand j'ai tapé le "php://input" le code manuellement, ça a marché. Ça m'a pris un moment pour comprendre !

1 votes

Je suis content d'avoir descendu un peu plus bas et d'avoir vu ceci - j'avais le même problème. Bonne découverte !

3 votes

Il semble que quelqu'un l'ait corrigé en modifiant le message de Meda. Mais j'ai regardé l'historique des modifications et j'ai trouvé que le message original avait 200c 200b (caractères de largeur nulle) entre le "n" et le "p" dans "input". Je ne sais pas comment il en est arrivé là, mais c'est corrigé maintenant.

0 votes

Heureusement que j'ai fait défiler la page. Après environ 3 heures de gaspillage, j'ai réussi à le réparer.

7voto

Neo Points 130

J'étais confronté 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);

0 votes

Exactement ce que je cherchais, merci.

1voto

Installez l'application native Postman, l'extension Chrome a été dépréciée. (Le mien s'ouvrait dans sa propre fenêtre mais fonctionnait toujours comme une application Chrome)

3 votes

Cela ne répond pas à la question.

0 votes

@jhpratt En fait, c'est le cas. J'ai eu le même problème. Lorsque j'ai utilisé l'application Postman, cela a fonctionné. La question est : pourquoi cela ne fonctionne-t-il pas avec Postman ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X