質問

私はベースから外れているかもしれませんが、午後ずっとを実行しようと試みてきましたこの凹部PHPフレームワークチュートリアルのcurl postコマンド。私が理解していないのは、PHPがPOSTをどのように解釈するかということで、常に空の配列として表示されます。

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

(そこにあるスラッシュは、私を馬鹿に見えないようにするためのものですが、PHP 5.2を使用してWindowsから実行し、Linuxサーバー、Linux curlと同じバージョンでも試しました)

非常に簡単なように思えるので、私が見逃しているものがあるに違いありません。投稿が正しく解釈されないだけで、もしそうなら、すべてがうまくいくでしょう。

これは私が戻ってくるものです:

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リクエストを次のように変更してみてください:

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

そしてそれが役立つかどうかを確認してください。

curlがデータをJSONとして送信するには、いくつかの追加フラグを設定する必要があります。

コマンド

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

フラグ

  • -H :カスタムヘッダー、次の引数はヘッダーであることが期待されます
  • -X :カスタムHTTP動詞、次の引数は動詞であると予想されます
  • -d :次の引数をHTTP POSTリクエストのデータとして送信します

リソース

次のように引用符をエスケープする必要があります:

curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}'  \
  http://localhost:3570/index.php/trainingServer/screencast.json
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top