我正在尝试在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数组。 我做错了还是有另一种解析请求的方法? 请指导我。
答案 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