Pregunta

Puede que esté fuera de la base, pero llevo toda la tarde intentando ejecutar el curl post command en este tutorial de marco PHP de receso. 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 diagonal allí 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 obtengo:

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}}
¿Fue útil?

Solución

El análisis de Jordans de por qué la matriz $ _POST no está poblada es correcto. Sin embargo, puedes usar

$data = file_get_contents("php://input");

para recuperar el cuerpo http y manejarlo usted mismo. Consulte secuencias 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 los datos de los formularios de multipartes http. Además, use application / json como tipo de contenido cuando publique su solicitud.

Otros consejos

Normalmente, el parámetro -d se interpreta como codificado en forma. Necesita 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

Creo que está obteniendo una matriz vacía porque PHP espera que los datos publicados estén en un formato de Cadena de consulta (clave = valor & amp; clave1 = valor1).

Intente cambiar su solicitud de curl a:

curl -i -X POST -d 'json={"screencast":{"subject":"tools"}}'  \
      http://localhost:3570/index.php/trainingServer/screencast.json

y vea si eso ayuda.

Necesitas establecer algunas marcas extra para que Curl envíe los datos como JSON.

comando

$ curl -H "Content-Type: application/json" \
       -X POST \
       -d '{"JSON": "HERE"}' \
       http://localhost:3000/api/url

banderas

  • -H : encabezado personalizado, se espera que el siguiente argumento sea encabezado
  • -X : verbo HTTP personalizado, se espera que el siguiente argumento sea verbo
  • -d : envía el siguiente argumento como datos en una solicitud HTTP POST

recursos

Deberías escapar de las citas como esta:

curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}'  \
  http://localhost:3570/index.php/trainingServer/screencast.json
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top