私はベースから外れているかもしれませんが、私は午後中ずっと curl postコマンド このリセスPHPフレームワークチュートリアルで実行しようと試みてきました。私が理解していないのは、どのようにPHPが私のPOSTを解釈することになっているのか、それは常に空の配列として現れるということです。
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}}
ヨルダンの$ _POST-arrayが設定されていない理由の分析は正しいです。ただし、使用できます
$data = file_get_contents("php://input");
http本体を取得して自分で処理するだけです。 PHP入出力ストリーム を参照してください。
プロトコルの観点からは、これは実際にはより正確です。とにかくhttpマルチパートフォームデータを実際に処理しているわけではないからです。また、リクエストを送信するときに、コンテンツタイプとして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