Puede que esté fuera de lugar, pero he estado intentando toda la tarde ejecutar el comando curl post en este tutorial de marco PHP de recreo. Lo que no entiendo es cómo se supone que PHP debe interpretar mi POST, siempre aparece como una matriz vacía.
curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
(La barra inclinada es solo para que no parezca un idiota, pero ejecuté esto desde Windows usando PHP 5.2, también probé en un servidor Linux, la misma versión con Linux curl)
Debe haber algo que me falta porque parece bastante sencillo, la publicación simplemente no se interpreta correctamente, si lo fuera, todo funcionaría muy bien.
Esto es lo que recibo:
Conflicto HTTP / 1.1 409 Fecha: viernes, 01 de mayo de 2009 22:03:00 GMT Servidor: Apache / 2.2.8 (Win32) PHP / 5.2.6 Desarrollado por X: PHP / 5.2.6 Codificación de transferencia: fragmentado Tipo de contenido: texto / html; juego de caracteres = iso-8859-1 {"screencast": {"id": null, "subject": null, "body": null, "dataUrl": nulo, "dataMedium": nulo, "createdOn": nulo, "autor": nulo}}
application/json
.Respuestas:
El análisis de Jordans de por qué la matriz $ _POST no está poblada es correcto. Sin embargo, puede utilizar
para recuperar el cuerpo http y manejarlo usted mismo. Consulte Flujos de entrada / salida de PHP .
Desde la perspectiva del protocolo, esto es en realidad más correcto, ya que de todos modos no está procesando datos de formularios http multiparte. Además, use application / json como tipo de contenido al publicar su solicitud.
fuente
Normalmente, el parámetro
-d
se interpreta como codificado en forma. Necesitas el-H
parámetro:fuente
Creo que está obteniendo una matriz vacía porque PHP espera que los datos publicados estén en formato Querystring (clave = valor y clave1 = valor1).
Intente cambiar su solicitud de curl a:
y vea si eso ayuda a alguno.
fuente
-H "Content-Type: application/json"
no funcionó para mí.Debe configurar algunas banderas adicionales para que curl envíe los datos como JSON.
mando
banderas
-H
: encabezado personalizado, se espera que el siguiente argumento sea el encabezado-X
: verbo HTTP personalizado, se espera que el siguiente argumento sea un verbo-d
: envía el siguiente argumento como datos en una solicitud HTTP POSTrecursos
fuente
Deberías escapar de las comillas de esta manera:
fuente