当POST数组*不为空时,RESTful服务错误输出

时间:2013-01-17 22:23:13

标签: php codeigniter rest curl codeigniter-2

我正试图进行我对RESTful服务的第一次真正尝试 (我正在使用@ Phil-Sturgeon放在一起的codeigniter-restserver库。)

该服务适用于GET请求 另一方面,POST给我一个曲线球。使用 POST阵列的尝试是成功的......所有其他人似乎都失败了。

CODE:

/*** 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而不会产生错误:)

有人听说过这样的事吗? 我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

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

将其关闭
$config['csrf_protection'] = FALSE;

答案 1 :(得分:1)

您也可以仅为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;
}

答案 2 :(得分:0)

CSRF是一个婊子。把它关掉:

$config['csrf_protection'] = FALSE; 

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