PHP API在POST中获取空JSON请求

时间:2016-02-18 06:09:16

标签: php json api curl

我正在尝试在php中开发小型API代码,它将使用PHP curl(来自客户端)以json格式发送POST请求。在接收方(在服务器端)我想解析请求并处理它。但在接收方它给我在post field中的空数组。 以下是我的代码

客户端:

<?php

    $data = array("name" => "Hagrid", "age" => "36");                                                                    
    $data_string = json_encode($data);                                                                                   
    $ch = curl_init($url);                                                                      
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
    curl_setopt($ch, CURLOPT_POSTFIELDS, "xdata=".$data_string);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
        'Content-Type: application/json',                                                                                
        'Content-Length: ' . strlen($data_string))                                                                       
    );                                                                                                                   
    echo $result = curl_exec($ch);

?>

在服务器端:

<?php

    print_r($_POST);

?>
  

块引用   数组()   块引用

它总是在服务器端给我空的POST数组。 我做错了还是有另一种解析请求的方法? 请指导我。

2 个答案:

答案 0 :(得分:4)

您可以使用 php://输入只读流来访问JSON帖子数据,而不是 $ _ POST 这样

<?php 
    $json = file_get_contents('php://input');
?>

它将按原样为您提供POST数据。您可以稍后使用json_decode()解码它。

示例代码 -

<?php 
   $json = json_decode(file_get_contents('php://input'));
?>

答案 1 :(得分:0)

您使用0 1 2 3 4 5 6 7 8 9 9 0 8 1 7 2 6 3 5 4 标头设置了错误的内容长度。您的整体帖子字符串为CURLOPT_HTTPHEADER,而您使用的是strlen("xdata=".$data_string)

此外,您使用strlen($data_string)进行发布,但强行提及内容类型为application/x-www-form-urlencoded

因此,请从代码中删除以下块,您应该没问题。

application/json