Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php POST数组为*非*空时,RESTful服务出错_Php_Codeigniter_Rest_Curl_Codeigniter 2 - Fatal编程技术网

Php POST数组为*非*空时,RESTful服务出错

Php POST数组为*非*空时,RESTful服务出错,php,codeigniter,rest,curl,codeigniter-2,Php,Codeigniter,Rest,Curl,Codeigniter 2,我正在尝试第一次真正尝试RESTful服务。 (我正在使用@Phil Sturgeon整合的codeigniter restserver库。) 该服务对GET请求非常有效。 另一方面,波斯特正在向我扔一个弧线球。使用空POST数组的尝试成功。。。其他的似乎都失败了 代码: /*** sandbox ***/ ... $curl_handle = curl_init(); curl_setopt($curl_handle, CURLOPT_URL, 'http://localhost/proje

我正在尝试第一次真正尝试RESTful服务。
(我正在使用@Phil Sturgeon整合的codeigniter restserver库。)

该服务对GET请求非常有效。
另一方面,波斯特正在向我扔一个弧线球。使用POST数组的尝试成功。。。其他的似乎都失败了

代码:

/*** sandbox  ***/
...
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, 'http://localhost/project/api/companies');
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_POST, 1);

// This works.
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, array());

// This throws the error
//curl_setopt($curl_handle, CURLOPT_POSTFIELDS, array('chicken'=>'licken'));

$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
var_export($buffer);
...


/*** RESTful controller ***/
...
function companies_post(){
    $this->response('It Works!', 200);
}  // end method: companies_post()
...

错误:
当我的
CURLOPT_POSTFIELDS
数组不是空的时,我得到:

遇到错误
不允许您请求的操作


目标:
我的直接目标是在响应中简单地返回POST有效负载,这样我就可以证明往返有效。
不过,在这一点上,我只能满足于在不抛出错误的情况下将任何实质性内容发布到API中:)

有人听说过这样的事吗?

这里缺少什么?

我认为在REST应用程序的配置文件中,CSRF保护设置为
TRUE
。您需要将CSRF令牌名称和CSRF哈希作为其值传递到curl POST请求数组中,或者将其值更改为
FALSE

$config['csrf_protection'] = FALSE;

CSRF是个婊子。关闭它:

$config['csrf_protection'] = FALSE; 

在更高版本中,您可以添加白名单IP/域,您的客户端将是其中之一。

您还可以仅对api请求禁用csrf。
示例:编辑config.php并将$config['csrf_protection']行更改为

$config['csrf_protection'] = TRUE;
if (isset($_SERVER["REQUEST_URI"]) 
      && stripos($_SERVER["REQUEST_URI"],'/api') !== FALSE) {
  $config['csrf_protection'] = FALSE;
}

我无法再现你的错误。你所有的代码都能正常工作。然而,我确实遇到了一个有趣的问题,即在发布到一个向自身发出curl请求的文件时遇到了这个问题(我在连接不足的情况下运行了apache)。不管怎样,我认为你的问题不在于卷曲。是的,谢谢赛斯。我怀疑问题出在@philsturgeons图书馆。。。或者更准确地说,我的it实现/配置;)。我真的希望我只是犯了一些简单的错误。。。很容易解开那些骨头:你赢了。当我发布我的时没有看到这个,一定是一夜之间打开了链接。太好了。这就成功了。感谢您提供有关如何通过CSRF认证的更多信息。我也得试试:)