php未从请求获取数据,从curl发布
我正在从命令行触发一个curl请求 我的卷曲请求如下所示:php未从请求获取数据,从curl发布,php,curl,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.ph
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);
}
?>
但是$\u服务器似乎没有json数据。我遗漏了什么吗?在
$\u服务器中没有$\u服务器['HTTP\u JSON']
这样的条目。您需要从$\u POST
获取帖子内容
但是,由于您没有为JSON数据提供变量名,因此应该使用
$json = file_get_contents("php://input");
另一个解决方案是为JSON数据分配一个变量名:
curl -X POST ... -d 'HTTP_JSON={ ... }'
只要JSON中没有禁止的字符(如?或&),您就是安全的,否则您还必须对JSON字符串进行URL编码。这就是为什么我建议使用php://input
。这样,您就不必关心URL编码。您使用curl发布信息,因此请使用$\u POST
而不是$\u SERVER
function handle_post_request (){
$json = $_POST['HTTP_JSON'];
print_r ($_POST);
}
此函数返回$_SERVER的值,而不是$json变量的值
function handle_post_request (){
$json = $_SERVER['HTTP_JSON'];
print_r ($_SERVER);
}
第二,我相信你必须使用$u POST来实现这一点:
function handle_post_request (){
$json = $_POST['HTTP_JSON'];
print_r ($json, true);
}
没有更多的代码很难说。您刚刚提供了一个函数的用法。它非常简单。。但我仍然把代码贴在这里,我注意到你们在服务器上寻找它。。。它不应该放在POST中吗?当你不认识请求方法时,你不应该假装收到了一个POST
。相反,您应该返回405HTTP错误。也许你收到了一个HEAD
请求……你能解释一下你的答案吗。因为根据我得到的定义——“file_get_contents()是将文件内容读入字符串的首选方式。”但我不发送任何文件。在php中,URL也被视为文件。这是一个特定于PHP的URL,包含请求的完整主体。您将在POST请求的正文中发送JSON,因此必须以这种方式获得它。我还将在一分钟内向您展示使用$\u POST数组执行此操作的另一种方法…还有一个疑问,如果我从andriod客户端发送数据,是否需要更改代码?或者它也会一样工作..这将适用于每个POST请求,无论它来自哪里,浏览器或命令行,手机或桌面…我尝试了,但得到了一个空白数组。。。任何关于为什么$u POST如此的建议都是正确的,但是由于JSON没有变量名,您必须获取原始POST数据$u POST是正确的,但是由于JSON没有变量名,您必须获取原始POST数据AHH。但是$json=$\u POST['HTTP\u json']是完全无用的?是的,因为请求没有HTTP\u json..所以是的,在将此名称赋予json数据之前它是无用的。。在第一种情况下,我正在打印$\u服务器变量,以便查看我的所有请求参数。啊,好的,谢谢!:-)(不,我不是世界上真正最好的程序员;-)但我正在学习:-)