1

我正在从命令行发出 curl 请求。

我的 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

此函数返回 $_SERVER 的值,而不是 $json 变量的值。

  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 回答
0

您正在使用 curl 发布信息,因此请使用$_POST而不是$_SERVER.

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