callapi - Cómo publicar JSON en PHP con curl
php curl post json (5)
Creo que está obteniendo una matriz vacía porque PHP espera que los datos publicados estén en formato Querystring (clave = valor & clave1 = valor1).
Intenta cambiar tu solicitud de curl a:
curl -i -X POST -d ''json={"screencast":{"subject":"tools"}}'' /
http://localhost:3570/index.php/trainingServer/screencast.json
y ver si eso ayuda.
Puede que esté fuera de la base, pero he intentado toda la tarde ejecutar el comando de curl post en este tutorial de estructura de PHP de receso. Lo que no entiendo es cómo se supone PHP para 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 es solo para hacer 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 curl de Linux)
Debe haber algo que me falta porque parece bastante sencillo, la publicación no se interpreta correctamente, si fuera así, todo funcionaría bien.
Esto es lo que recibo:
HTTP/1.1 409 Conflict Date: Fri, 01 May 2009 22:03:00 GMT Server: Apache/2.2.8 (Win32) PHP/5.2.6 X-Powered-By: PHP/5.2.6 Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 {"screencast":{"id":null,"subject":null,"body":null, "dataUrl":null,"dataMedium":null,"createdOn":null,"author":null}}
Deberías escapar de las citas como esta:
curl -i -X POST -d ''{/"screencast/":{/"subject/":/"tools/"}}'' /
http://localhost:3570/index.php/trainingServer/screencast.json
El análisis de Jordans de por qué la matriz $ _POST no está poblada es correcta. Sin embargo, puedes usar
$data = file_get_contents("php://input");
simplemente recuperar el cuerpo http y manejarlo usted mismo. Ver flujos de entrada / salida PHP .
Desde una perspectiva de protocolo, esto es realmente más correcto, ya que en realidad no está procesando datos de formularios http multipartes. Además, use application / json como tipo de contenido cuando publique su solicitud.
Necesita establecer algunos indicadores adicionales para que curl envíe los datos como JSON.
mando
$ curl -H "Content-Type: application/json" /
-X POST /
-d ''{"JSON": "HERE"}'' /
http://localhost:3000/api/url
banderas
-
-H
: cabecera personalizada, se espera que el siguiente argumento sea el encabezado -
-X
: verbo HTTP personalizado, se espera que el siguiente argumento sea el verbo -
-d
: envía el siguiente argumento como datos en una solicitud HTTP POST
recursos
Normalmente, el parámetro -d
se interpreta como un código de forma. Necesitas el parámetro -H
:
curl -v -H "Content-Type: application/json" -X POST -d ''{"screencast":{"subject":"tools"}}'' /
http://localhost:3570/index.php/trainingServer/screencast.json