我正在使用 CodeIgniter 开发一个 RESTful 应用程序,但我无法在我的控制器中访问我的 POST'd json 数据。
我正在本地机器上通过 cURL 发布 json,而该应用程序正在远程服务器上开发。
这是有问题的控制器代码:
class Products extends CI_Controller
{
public function __construct()
{
$this->load->model(products_model);
}
public function index($id = FALSE)
{
if($_SERVER['REQUEST_METHOD'] == 'GET')
{
// fetch product data
$product_data = $this->products_model->get_products($id)
// set appropriate header, output json
$this->output
->set_content_type(application/json)
->set_output(json_encode($product_data));
}
elseif($_SERVER['REQUEST_METHOD'] == 'POST')
{
// debugging for now, just dump the post data
var_dump($this->input->post());
}
}
}
GET 操作运行良好,并在从浏览器请求或通过 cURL 请求时返回适当的数据。但是,当尝试通过 cURL POST json 数据时,我始终会bool(FALSE)
从 index 函数的 POST 部分返回。这是我正在发出的 cURL 请求:
curl -X POST -d @product.json mydomain.com/restfulservice/products
此外,这是 product.json 文件的内容:
{"id":"240",
"name":"4 x 6 Print",
"cost":"1.5900",
"minResolution":401,
"unitOfMeasure":"in",
"dimX":0,
"dimY":0,
"height":4,
"width":6}
我通过 cURL 进行了另一个 POST,不包括 json 数据并传递了如下内容:
curl -X POST -d '&this=that' mydomain.com/restfulservice/products
哪个返回
array(1) {
["this"]=>
string(4) "that"
}
是什么赋予了?json的东西?这是有效的。我已经在 application/config/config.php 中关闭了全局 CSRF 和 XSS,因为我知道它们需要使用 CI form_open()
,没有它就无法正常工作。据我了解,排除参数 from$this->input->post()
将返回所有帖子项目,但我仍然没有得到任何内容。我也试过绕过 CI 的输入库并通过 PHP 的$_POST
变量访问数据,它没有任何区别。