Posso estar errado, mas tenho tentado a tarde toda executar o comando curl post neste tutorial de recesso do framework PHP. O que eu não entendo é como o PHP deve interpretar meu POST, ele sempre aparece como um array vazio.
curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
(A barra ali é só para não me parecer um idiota, mas executei no windows usando PHP 5.2, também tentei em um servidor Linux, mesma versão do Linux curl)
Deve haver algo que estou faltando porque parece bem direto, o post simplesmente não está sendo interpretado direito, se fosse, tudo daria certo.
Isso é o que eu recebo de volta:
Conflito HTTP / 1.1 409 Data: Sex, 01 de maio de 2009, 22:03:00 GMT Servidor: Apache / 2.2.8 (Win32) PHP / 5.2.6 X-Powered-By: PHP / 5.2.6 Transfer-Encoding: chunked Tipo de conteúdo: text / html; charset = iso-8859-1 {"screencast": {"id": null, "subject": null, "body": null, "dataUrl": null, "dataMedium": null, "createdOn": null, "autor": null}}
application/json
.Respostas:
A análise de Jordans de por que a matriz $ _POST não está preenchida está correta. No entanto, você pode usar
para apenas recuperar o corpo http e tratá-lo você mesmo. Veja streams de entrada / saída PHP .
De uma perspectiva de protocolo, isso é realmente mais correto, já que você não está realmente processando dados de formulário de várias partes http. Além disso, use application / json como tipo de conteúdo ao postar sua solicitação.
fonte
Normalmente, o parâmetro
-d
é interpretado como codificado por formulário. Você precisa do-H
parâmetro:fonte
Acredito que você esteja obtendo uma matriz vazia porque o PHP espera que os dados postados estejam em um formato Querystring (chave = valor & chave1 = valor1).
Tente alterar sua solicitação curl para:
e veja se isso ajuda em alguma coisa.
fonte
-H "Content-Type: application/json"
não funcionou para mim.Você precisa definir alguns sinalizadores extras para que curl envie os dados como JSON.
comando
bandeiras
-H
: cabeçalho personalizado, o próximo argumento deve ser cabeçalho-X
: verbo HTTP personalizado, o próximo argumento deve ser verbo-d
: envia o próximo argumento como dados em uma solicitação HTTP POSTRecursos
fonte
Você deve escapar das aspas desta forma:
fonte