为什么我无法访问json数据POST';我的codeigniter应用程序是否有问题?

为什么我无法访问json数据POST';我的codeigniter应用程序是否有问题?,json,codeigniter,rest,post,curl,Json,Codeigniter,Rest,Post,Curl,我正在使用CodeIgniter开发一个RESTful应用程序,无法访问控制器中的POST'd json数据 我正在本地机器上通过cURL发布json,而应用程序正在远程服务器上开发 以下是有问题的控制器代码: class Products extends CI_Controller { public function __construct() { $this->load->model(products_model); } public function i

我正在使用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发布json数据时,我始终会从index函数的POST部分返回
bool(FALSE)
。这是我提出的卷曲要求:

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发表了另一篇文章,排除了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()
,没有它就无法正常工作。我的理解是,排除
$this->input->post()
中的参数将返回所有post项目,但我仍然没有得到任何项目。我还尝试过绕过CI的输入库,通过PHP的
$\u POST
变量访问数据,这没有什么区别。

您的POST数据不是查询字符串格式,因此您应该跳过处理$\u POST,直接进入原始POST数据

试一试

甚至更好

var_dump(file_get_contents("php://input")); 

在CodeIgniter2.X中,您可以覆盖输入类并添加必要的功能。

  • 将文件MY_Input.php添加到application/core
  • 在此文件中添加代码:

  • 您的ci安装中是否有CSRF令牌处于活动状态?@yahyaE
    $config['CSRF\u-token\u-name']
    仍具有默认值“CSRF\u-test\u-name”,即使
    $config['CSRF\u-protection']=FALSE
    ,这是否会影响应用程序?如果为FALSE,则不应为CSRF。您可以尝试使用firebug或Chrome的inspect元素监视网络活动和日志。请尝试在
    var\u dump()内使用
    $\u POST
    @JeffHines抱歉,忘了提及我在问题中尝试过这一点。不幸的是,同样的结果。
    file\u get\u contents('php://input)
    效果很好,谢谢<但是,代码>$HTTP\u原始\u发布数据
    没有。我的PHP配置已禁用该指令。
    var_dump(file_get_contents("php://input"));