php没有从Request获取数据,从curl发布

时间:2013-03-26 23:49:11

标签: php 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数据。我错过了什么吗?

3 个答案:

答案 0 :(得分:3)

$_SERVER['HTTP_JSON']中没有$_SERVER这样的条目。您需要从$_POST获取POST内容。

但是,由于您没有为您的JSON数据提供变量名称,因此您应该使用

获取原始POST内容
$json = file_get_contents("php://input");

另一种解决方案是为您的JSON数据分配变量名称:

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

只要您的JSON中没有禁用字符(例如?或&amp;),您就是安全的,否则您还必须对您的JSON字符串进行URL编码。这就是我使用php://input建议第一个解决方案的原因。这样您就不必关心URL编码了。

答案 1 :(得分:0)

您使用curl发布信息,因此请使用$_POST代替$_SERVER

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

答案 2 :(得分:0)

此函数返回$ _SERVER的值,而不是$ json-variable的值。

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

第二,我相信你必须使用$ _POST来实现这个目的:

  function handle_post_request (){
   $json = $_POST['HTTP_JSON'];
    print_r ($json, true);
   }