php 使用Postman调用端点时,Code Igniter中的$_POST变量为空

wlp8pajw  于 2023-05-16  发布在  PHP
关注(0)|答案(1)|浏览(471)

我有一个Web应用程序内置代码点火器,这是工作,并希望能够调用某些功能从某个控制器通过 Postman 。
因为我使用的是postman(出于测试目的),所以我忽略了整个登录/验证逻辑,只关注如何实现控制器的功能。
问题是,当到达控制器函数时,我的$_POST(和$this->input->post())变量是空的。我试着将这个变量记录在Config.php文件中(我相信这是使用Code Ignitier时要调用的第一个文件),此时它已经为空。

如何测试?

在我的公共函数中,我打印了$this->input->post()的结果。当从postman调用函数时,结果为空,但当我从Web应用程序中调用时,结果显示通过请求传递的有效负载。
从那一刻起,我从调用堆栈向上走,直到到达Config.php文件,这就是我试图从$_POST打印值的地方。
我也试过使用json_decode(file_get_contents('php://input'), true);,但没有任何成功。
我的php代码:

public function myFunction()
    {
        
        $x = json_decode(file_get_contents('php://input'), true);
        var_dump($x);
        var_dump($_POST);
        var_dump($this->input->post('payload'));
}

总结如下:

  • 尝试了不同类型的内容类型与 Postman (如下所示)
  • 我也尝试了不同的方式来显示帖子正文(如上所示)
  • 尝试在代码执行的不同部分记录post正文

请求:
POST:http://localhost/myController/myFunction
标题:
用户名:我的用户

调用myFunction的结果:

NULL
array(0) {}
NULL

为什么$this->input->post()$_POST在这两种情况下使用postman时都是空的?
编辑:如建议,我已经尝试使用form-datax-www-form-urlencoded,但结果仍然是一样的。

knsnq2tg

knsnq2tg1#

我的情况是服务器(nginx)配置的问题。当任何调用到达端点时,服务器会用301状态码重定向(我在使用ngrok为API提供公共调用时发现了这个状态码)。
在Postman中,如果您使用选项Follow original HTTP Method,它将成功发出请求。就在那时,我注意到发生了一些与重定向有关的事情。
问题是301重定向并不维护请求中的post正文。
解决方案是从服务器更新配置,以使用状态代码307重定向,这将是maintain the post body

相关问题