Invia dati POST tramite raw json con postino


107

Ho Postman (quello che non si apre in Chrome) e sto cercando di eseguire una richiesta POST utilizzando raw json.

Nella scheda Body ho selezionato "raw" e "JSON (application / json)" con questo corpo:

{
    "foo": "bar"
}

Per l'intestazione ho 1, Content-Type: application/json

Sul lato PHP sto solo facendo print_r($_POST);per ora e ottengo un array vuoto.


Se uso jQuery e faccio:

$.ajax({
    "type": "POST",
    "url": "/rest/index.php",
    "data": {
        "foo": "bar"
    }
}).done(function (d) {
    console.log(d);
});

Sto ottenendo come previsto:

Array
(
    [foo] => bar
)

Allora perché non funziona con Postman?


Screenshot del postino:

inserisci qui la descrizione dell'immagine

e intestazione:

inserisci qui la descrizione dell'immagine


Prova $ _REQUEST invece di $ _POST e var_dump () invece di print_r ()
Deep

@ Deep ottengo array(1) {["foo"]=> string(3) "bar"}con jQuery e ancora un array vuoto con Postman:array(0) {}
Dallas

Quindi il postino non invia la richiesta
Deep

@smerny nel tuo post fieldse foonon corrisponderà, quindi non funzionerà, non sono sicuro che sia un errore di battitura ma assicurati che corrispondano
meda

@meda, è vero che era un errore di battitura, ma se avessi dei campi dovrebbe comunque avere un output nel dump var di $ _REQUEST o $ _POST
Dallas

Risposte:


38

A differenza jQuerydi quanto accade per leggere raw JSON, dovrai decodificarlo in PHP.

print_r(json_decode(file_get_contents("php://input"), true));

php://input è un flusso di sola lettura che consente di leggere i dati grezzi dal corpo della richiesta.

$_POSTè variabile del modulo, dovrai passare al formradiobutton in postmanquindi utilizzare:

foo=bar&foo2=bar2

Per pubblicare raw jsoncon jquery:

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

sì, la pubblicazione di json e le variabili post sono diverse
meda

43

Basta controllare l'opzione JSON dal menu a discesa accanto a binario; quando fai clic su raw. Questo dovrebbe bastare

Skill Synon passa Json al postino


4
questo è un post abbastanza vecchio .. ma se guardi la domanda vedrai che ho fatto esattamente questo. potresti voler leggere la domanda, la risposta selezionata e i commenti sulla risposta selezionata per comprendere meglio il problema e la soluzione.
Dallas,

1
Certo, ma questo in realtà ha individuato il problema che avevo; Avevo selezionato "Testo", non application / json, anche se era già stato menzionato nella sezione Intestazioni. È confusionario; se scegli "Testo", viene visualizzato l'intero "codice" HTTP POST, incluso il JSON, che mi aspettavo funzionasse, poiché è una chiamata POST completa, non solo il json.
Ted

7

La risposta di meda è completamente legittima, ma quando ho copiato il codice ho ricevuto un errore!

Da qualche parte nel "php://input"c'è un carattere non valido (forse una delle virgolette?).

Quando ho digitato il "php://input"codice manualmente, ha funzionato. Mi ci è voluto un po 'per capirlo!


1
Sono contento di aver fatto scorrere un po 'più in basso e di aver visto questo - avevo lo stesso problema. Buona scoperta!
Charlie Stanard

2
Sembra che qualcuno l'abbia risolto in una modifica al post di meda. Ma ho esaminato la cronologia delle modifiche e ho scoperto che il post originale aveva 200c 200b(caratteri di larghezza zero) tra "n" e "p" in "input". Non sono sicuro di come sia finito con quello, ma ora è stato risolto.
Dallas,

6

Stavo affrontando lo stesso problema, il seguente codice ha funzionato per me:

$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);


1

Installa l'app nativa Postman, l'estensione di Chrome è stata deprecata. (Il mio si stava aprendo nella propria finestra ma funzionava ancora come app Chrome)


2
Questo non risponde alla domanda.
jhpratt

@jhpratt in realtà lo fa. Ho avuto lo stesso problema. Quando è stata utilizzata l'app Postman, ha funzionato. La domanda è: allora perché non funziona con Postman?
Jaroslav Štreit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.