web-dev-qa-db-fra.com

Envoyer POST données via json brut avec postier

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:

 enter image description here

et en-tête:

 enter image description here

51
smerny

À 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'
});
17
meda

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!

7
CoredusK

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

4
Neo

Installer l'application native Postman, l'extension Chrome est obsolète .

2
Jaroslav Štreit

Il suffit de cocher l’option JSON dans le menu déroulant à côté de binary lorsque vous cliquez sur raw. Cela devrait faire

 skill synon pass json to postman

1
Itachi