我从命令行发出一个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数据。我错过了什么吗?
答案 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);
}