3

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

该服务适用于 GET 请求。
另一方面,POST 正在向我扔一个曲线球。使用空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 而不会引发错误:)

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

4

3 回答 3

2

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

$config['csrf_protection'] = FALSE;
于 2013-01-18T05:35:50.497 回答
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;
}
于 2014-02-05T12:41:02.533 回答
0

CSRF 是个婊子。把它关掉:

$config['csrf_protection'] = FALSE; 

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

于 2013-01-18T13:34:11.343 回答