1

コマンドラインからcurlリクエストを実行しています。

私のカールリクエストは次のようになります:

curl -X POST -H "Accept: application/json"  -H "Content-type: application/json"  -d '{ "BookingByCustomer" : "testUser", "BookingDate" : "11111111", "TotalCost" : "11", "NetAmount"  : "11" }' http://serverIP:port/test.php 

私のPHPコード:

    <?php
   /** global variables */
    $request_called = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 'GET' : 'POST';

    if($request_called == 'POST')
    {
         handle_post_request();
    }
    if($request_called == 'GET')
     {
       handle_get_request();
     }

    function handle_get_request (){
      echo "Get Request has been called!";   
   }

    function handle_post_request (){
   $json = $_SERVER['HTTP_JSON'];
    print_r ($_SERVER);
   }
 ?>

しかし、$_SERVERにはjsonデータがないようです。私は何か見落としてますか??

4

3 に答える 3

3

のようなエントリはありませ$_SERVER['HTTP_JSON']$_SERVER。からPOSTコンテンツを取得する必要があります$_POST

ただし、JSONデータに変数名を付けていないため、生のPOSTコンテンツを次のように取得する必要があります。

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

別の解決策は、JSONデータに変数名を割り当てることです。

curl -X POST ... -d 'HTTP_JSON={ ... }'

JSONに禁止文字(?や&など)が含まれていない限り、安全です。そうでない場合は、JSON文字列をURLエンコードする必要があります。そのため、を使用した最初のソリューションを提案しましたphp://input。このように、URLエンコードについて気にする必要はありません。

于 2013-03-26T23:54:02.177 に答える
0

情報をcurlで投稿しているので、$_POSTの代わりに使用してください$_SERVER

function handle_post_request (){
    $json = $_POST['HTTP_JSON'];
    print_r ($_POST);
}
于 2013-03-26T23:54:09.360 に答える
0

この関数は、$json変数の値ではなく$_SERVERの値を返します。

  function handle_post_request (){
   $json = $_SERVER['HTTP_JSON'];
    print_r ($_SERVER);
   }

次に、これを機能させるには$_POSTを使用する必要があると思います。

  function handle_post_request (){
   $json = $_POST['HTTP_JSON'];
    print_r ($json, true);
   }
于 2013-03-27T00:06:52.650 に答える