我是新手,试图用PHP构建Restful服务。 到目前为止,我有两种可用的方法,一种用于列出用户,另一种用于在数据库中创建条目。第一个工作正常,我调用API并获取所需的列表。第二个是json_decode(file_get_contents(“ php:// input”));始终为null。
这是我调用远程API的方法
public static function remoteApiCall($data=0, $method='GET', $apiURI=API_LIST_AQT_URI, $remoteServer=PUBLIC_LOCATION) {
try {
$curl = curl_init();
$url = $remoteServer.$apiURI;
switch ($method)
{
case "POST":
curl_setopt($curl, CURLOPT_POST, true);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_PUT, true);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
// Optional Authentication:
#curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
#curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
curl_close($curl);
return json_decode($result, true);
} catch(PDOException $e) {
echo $e->getMessage();
return false;
}
这是远程服务器上的create.php
<?php
session_start();
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
// instantiate object
include '../objects/remoteObject.php';
$_SESSION["ROOT"] = true;
$ano = new RemoteObject();
// get posted data
$data = json_decode(file_get_contents("php://input"));
var_dump($data);
(...)
这是我在代码中调用方法的方式
$data = array("ref" => $ref, "idUser" => $idUser;
var_dump($data);
$resulAnoCreation = MyAPI::remoteApiCall($data, "POST", API_CREATE_URI, PUBLIC_LOCATION);
我关注了this tutorial 我想念什么吗?
预先感谢
忘记提及我的呼叫和远程应用程序都在本地主机上,并且在Windows环境中运行。
又一次更新:如您在捕获时所见,我正在使用Postman Chrome扩展调试我的create方法。即使$ _POST的内容正确,file_get_contents(“ php:// input”)和$ HTTP_RAW_POST_DATA均为空。如我所说,我在Windows环境中。我是否需要启用任何特殊的环境变量,以便可以访问php:// input?
答案 0 :(得分:0)
经过很多努力,它似乎表明问题出在Windows环境。 因此,我在Windows和unix生产环境中的file_get_contents(“ php:// input”)中进行测试时使用了$ _POST。