Pergunta

Eu posso ser maneira fora da base, mas eu tenho tentado toda a tarde para executar o enrolar posto de comando neste recesso framework PHP tutorial. O que eu não entendo é como é PHP suposto interpretar meu post, ele sempre aparece como uma matriz vazia.

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

(A barra lá é só para me fazer não parecer um idiota, mas eu executado este a partir do Windows usando PHP 5.2, também tentou em um servidor Linux, mesma versão com Linux curl)

Deve haver algo que eu estou ausente porque parece bastante simples, o post não é apenas ser interpretada direito, se fosse, tudo seria um grande trabalho.

Isto é o que eu voltar:

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

Solução

análise Jordans de por que o $ _POST-matriz não é preenchida está correto. No entanto, você pode usar

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

apenas para recuperar o corpo http e lidar com isso sozinho. Consulte PHP entrada / saída córregos .

De uma perspectiva protocolo este é realmente mais correto, desde que você não está realmente processando http multipart dados do formulário de qualquer maneira. Além disso, a aplicação de uso / json como do tipo de conteúdo ao postar o seu pedido.

Outras dicas

Normalmente a -d parâmetro é interpretado como forma codificada. Você precisa do parâmetro -H:

curl -v -H "Content-Type: application/json" -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json

Eu acredito que você está recebendo um array vazio porque o PHP está esperando os dados postados para estar em um formato QueryString (key = value & key1 = value1).

Tente alterar o seu pedido curl para:

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

e ver se isso ajuda qualquer.

Você precisa definir algumas bandeiras extras para que onda envia os dados como JSON.

comando

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

bandeiras

  • -H: cabeçalho personalizado, próximo argumento é esperado para estar de cabeçalho
  • -X: personalizado HTTP verbo, próximo argumento é esperado para ser verbo
  • -d: envia o próximo argumento como dados em uma solicitação HTTP POST

recursos

Você deve escapar as aspas como este:

curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}'  \
  http://localhost:3570/index.php/trainingServer/screencast.json
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top