Envoyer des données POST via json brut avec postman

107

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

Dans l'onglet Body, 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é PHP, je fais juste print_r($_POST);pour le moment, et j'obtiens 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);
});

J'obtiens comme prévu:

Array
(
    [foo] => bar
)

Alors pourquoi ne fonctionne-t-il pas avec Postman?


Captures d'écran du facteur:

entrez la description de l'image ici

et en-tête:

entrez la description de l'image ici

Dallas
la source
Essayez $ _REQUEST à la place $ _POST et var_dump () à la place print_r ()
Deep
@Deep je reçois array(1) {["foo"]=> string(3) "bar"}avec jQuery et toujours un tableau vide avec Postman:array(0) {}
Dallas
Alors demande Postman ne pas envoyer
Profonde
@smerny dans votre message fieldset foone correspondra pas, donc cela ne fonctionnera pas, je ne sais pas si c'est une faute de frappe, mais assurez-vous qu'ils correspondent
meda
@meda, c'est vrai, c'était une faute de frappe, mais si j'avais des champs, il devrait toujours avoir une sortie dans le vidage var de $ _REQUEST ou $ _POST
Dallas

Réponses:

38

Contrairement jQueryà pour lire raw, JSONvous 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 requête.

$_POSTest des variables de formulaire, vous devrez passer à formradiobutton postmanpuis utiliser:

foo=bar&foo2=bar2

Pour publier brut jsonavec jquery:

$.ajax({
    "url": "/rest/index.php",
    'data': JSON.stringify({foo:'bar'}),
    'type': 'POST',
    'contentType': 'application/json'
});
meda
la source
oui exaclty publication json vs variables post sont différents
meda
43

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

compétence synon passer json au facteur

Itachi
la source
4
c'est un article 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.
Dallas le
1
Bien sûr, mais cela a en fait identifié le problème que j'avais; J'avais sélectionné "Texte", pas application / json, même si cela était déjà mentionné dans la section En-têtes. C'est confu; si vous choisissez "Texte", alors le "code" HTTP POST entier est affiché, y compris le JSON, dont je m'attendais à ce qu'il fonctionne, car il s'agit d'un appel POST complet, pas seulement le json.
Ted
7

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 invalide (peut-être l'un des guillemets?).

Lorsque j'ai tapé le "php://input"code manuellement, cela fonctionnait. Il m'a fallu un certain temps pour comprendre!

CoredusK
la source
1
Heureux d'avoir fait défiler un peu plus loin et vu ceci - j'avais le même problème. Bonne trouvaille!
Charlie Stanard
2
On dirait que quelqu'un l'a corrigé dans une modification du message de meda. Mais j'ai regardé l'historique d'édition 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 a fini avec ça, mais c'est réglé maintenant.
Dallas le
6

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);

Néo
la source
1

Installez l'application native Postman, l'extension Chrome est obsolète. (Le mien s'ouvrait dans sa propre fenêtre mais fonctionnait toujours en tant qu'application Chrome)

Jaroslav Štreit
la source
2
Cela ne répond pas à la question.
jhpratt
@jhpratt en fait. J'ai eu le même problème. Lors de l'utilisation de l'application Postman, cela a fonctionné. La question est: Alors pourquoi ne fonctionne-t-il pas avec Postman?
Jaroslav Štreit