2012-08-16 19 views
6

estoy usando curl para enviar esta:POSTAL vacío cuando se encrespa JSON

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

Estoy tratando de mostrar post como este en index.php

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

que da salida a

array(0) { 
} 

Debo estar malentendiendo algo sobre el envío de datos JSON a través de POST

Gracias por su tiempo

+0

Pregunta editada para usted – PandemoniumSyndicate

+0

Acepto: no está configurando correctamente los datos de la publicación JSON/HTTP. Mira este enlace: http://stackoverflow.com/questions/8045260/post-json-data-to-simple-rails-application-with-curl – paulsm4

+1

Creo que necesitas citar las variables ya que no son números – Waygood

Respuesta

21

$_POST es una matriz que sólo se rellena si envía el cuerpo POST en formato de URL codificada. PHP no analiza JSON de forma automática y, por lo tanto, no llena la matriz $_POST. Es necesario para conseguir el cuerpo de POST prima y decodificar el JSON a sí mismo:

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

Maldita sea, golpéame :-P –

+2

Por 3 segundos. O_o – deceze

+0

Resulta que debería ser '{"firstname": "james"}' – PandemoniumSyndicate

5

$_POST sólo funciona si van a enviar los datos del formulario codificados. Está enviando JSON, por lo que PHP no puede analizarlo en la matriz $_POST.

Debe leer directamente desde el cuerpo POST.

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