为什么我无法访问json数据POST';我的codeigniter应用程序是否有问题?
我正在使用CodeIgniter开发一个RESTful应用程序,无法访问控制器中的POST'd json数据 我正在本地机器上通过cURL发布json,而应用程序正在远程服务器上开发 以下是有问题的控制器代码:为什么我无法访问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
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中,您可以覆盖输入类并添加必要的功能。
您的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"));