如何在codeigniter中获取http请求正文数据?

时间:2012-02-19 04:33:43

标签: codeigniter

我无法从IOS obj-c客户端将JSON编码数据发布到我的CI控制器。我相信我的问题与提到here的问题相同。但我在CodeIgniter网站上找不到关于'request'对象的任何文档。如何查看/解析http请求正文中的数据?

$ this-> request-> body ??

谢谢!

6 个答案:

答案 0 :(得分:18)

我能够通过使用

来实现这一目标
$jsonArray = json_decode(file_get_contents('php://input'),true); 

以上内容将从输入请求中读取请求体,然后将JSON解码为关联数组。

如果CI有一个用于读取输入流http正文数据的包装器,我仍然会对重构此代码感兴趣。这个框架相当新颖。

答案 1 :(得分:2)

尝试使用 $this->input->raw_input_stream

答案 2 :(得分:2)

要继续使用CI纯模式,请执行以下操作:

$_POST = json_decode($this->input->raw_input_stream, true);

然后

$value = $this->input->post($fieldName);

答案 3 :(得分:0)

该文章中提到的“请求”对象属于一个名为“ codeigniter-restserver”的程序包。您可以找到更多信息here

可接受的答案是可行的答案,但是CodeIgniter确实提供了$this->input->raw_input_stream,可为您提供所需的确切信息。因此,以CodeIgniter方式编写代码,您应该使用:

$jsonArray = json_decode($this->input->raw_input_stream, true);

您会注意到raw_input_stream的源代码也使用了file_get_contents('php://input')方法。

答案 4 :(得分:0)

如果您使用的是Codeigniter版本> = 4,则可以尝试以下操作:

$requestBody = json_decode($this->request->getBody());

$user = $requestBody->user;

如果您使用的是版本3,则可以尝试

$this->input->post('user', TRUE);

答案 5 :(得分:-3)

从CI 2.1的CodeIgniter文档中,我看到Input类提供了以下调用

 $this->input->post(NULL, TRUE); // returns all POST items with XSS filter 

这样您就可以确保请求正文是XSS过滤的