2012-08-16 12 views
6

sto usando curl per inviare questa:POST vuoto quando il curling JSON

curl -i -H "Accept: application/json" -H "Content-type: application/json" -X POST -d "{firstname:james}" http://hostname/index.php 

sto cercando di visualizzare post come questo in index.php

<?php 
die(var_dump($_POST)); 
?> 

quali uscite

array(0) { 
} 

Devo essere frainteso qualcosa sull'invio di dati JSON tramite POST

Grazie per il vostro tempo

+0

Domanda modificata per voi – PandemoniumSyndicate

+0

Accetto: non state impostando correttamente i dati dei post JSON/HTTP. Guarda questo link: http://stackoverflow.com/questions/8045260/post-json-data-to-simple-rails-application-with-curl – paulsm4

+1

Penso che sia necessario citare le variabili poiché sono stringhe non numeri – Waygood

risposta

21

$_POST è un serie che è popolato solo se si invia il corpo POST in formato URL codificato. PHP non analizza automaticamente JSON da solo e quindi non popola l'array $_POST. È necessario per ottenere il corpo grezzo POST e decodificare il JSON da soli:

$json = file_get_contents('php://input'); 
$values = json_decode($json, true); 
+0

Dannazione, bastonatemi :-P –

+2

Di 3 secondi. O_o – deceze

+0

Risulta che dovrebbe essere '{"firstname": "james"}' – PandemoniumSyndicate

5

$_POST funziona solo se si sta inviando i dati forma codificata. Stai inviando JSON, quindi PHP non può analizzarlo nell'array $_POST.

È necessario leggere direttamente dal corpo POST.

$post = fopen('php://input', r); 
$data = json_decode(stream_get_contents($post)); 
fclose($post);