문제
나는 기지에서 벗어날 수 있지만 오후 내내 달리기 위해 노력하고 있습니다. 컬 포스트 명령 이 쉬는 시간에 PHP 프레임 워크 튜토리얼. 내가 이해하지 못하는 것은 PHP가 내 게시물을 어떻게 해석 해야하는지, 그것은 항상 빈 배열로 나타납니다.
curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
(슬래시는 단지 바보처럼 보이지 않게하기위한 것이지만, Php 5.2를 사용하여 Windows에서 이것을 실행했으며 Linux Curl과 동일한 버전에서 Linux 서버에서 시도했습니다).
매우 간단 해 보이기 때문에 내가 놓친 것이 있어야합니다. 게시물은 제대로 해석되지 않습니다. 만약 그렇다면 모든 것이 잘 작동 할 것입니다.
이것이 내가 돌아 오는 것입니다.
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}}
해결책
Jordans는 $ _post-array가 채워지지 않은 이유에 대한 분석이 정확합니다. 그러나 사용할 수 있습니다
$data = file_get_contents("php://input");
HTTP 본체를 회수하고 직접 처리합니다. 보다 PHP 입력/출력 스트림.
프로토콜 관점에서 이것은 실제로 HTTP Multipart 양식 데이터를 처리하지 않기 때문에 실제로 더 정확합니다. 또한 요청을 게시 할 때 Application/JSON을 콘텐츠 유형으로 사용하십시오.
다른 팁
일반적으로 매개 변수입니다 -d
형태 인코딩으로 해석됩니다. 당신은 필요합니다 -H
매개 변수 :
curl -v -H "Content-Type: application/json" -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
PHP가 게시 된 데이터가 쿼리 스트링 형식 (key = value & key1 = value1)을 기대하기 때문에 빈 배열을 얻고 있다고 생각합니다.
컬 요청을 다음으로 변경해보십시오.
curl -i -X POST -d 'json={"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
그리고 그것이 도움이되는지 확인하십시오.
다음과 같은 인용문을 피해야합니다.
curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json