我有Postman(在Chrome中没有打开的那个),我正在尝试使用原始json进行POST请求.
在Body选项卡中,我选择了"raw"和"JSON(application/json)"这个正文:
{
"foo": "bar"
}
Run Code Online (Sandbox Code Playgroud)
对于标题我有1, Content-Type: application/json
在PHP方面,我现在正在做print_r($_POST);,我得到一个空数组.
如果我使用jQuery并执行:
$.ajax({
"type": "POST",
"url": "/rest/index.php",
"data": {
"foo": "bar"
}
}).done(function (d) {
console.log(d);
});
Run Code Online (Sandbox Code Playgroud)
我得到了预期的结果:
Array
(
[foo] => bar
)
Run Code Online (Sandbox Code Playgroud)
那么为什么它不与Postman合作?
邮差截图:
和标题:
php://input在localhost中正常工作.但在服务器中它返回空.输入(请求)到我的站点是一个json(REST - 应用程序/ json类型),所以$_POST没有工作(请阅读此问题).
$ _POST与键值对类型输入一起使用,例如form-data或x-www-urlencoded
键1 =值&键2 =值&KEY3 = VALUE3
我正在使用application/json输入(在REST中).
就像{'key1':'value1','key2':'value2','key3':'value3'}
这无法使用$_POST.但使用php://input可以帮助读取该数据.
我的代码
class Webservice_Controller extends CI_Controller {
public $json_input_data;
public function __construct(){
parent::__construct();
$this->json_input_data = json_decode(file_get_contents('php://input'),TRUE);
}
public function json_input($label){
if(isset($this->json_input_data[$label])) return $this->json_input_data[$label];
else return NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在另一个网络服务器上工作正常,但不是在当前的.:(
我认为我的网络服务器拒绝访问php://input.
是否还有其他方法可以在php中读取json输入?