CodeIgniter中$this->input->post()返回NULL问题求助
解决CodeIgniter中Postman无法获取POST数据的问题
1. 检查Postman的请求体格式与Content-Type设置
浏览器表单默认用application/x-www-form-urlencoded编码提交数据,Postman如果选错格式会导致后端无法解析:
- 模拟表单提交:选择
x-www-form-urlencoded选项卡,逐个添加键值对(如name=xxx),Postman会自动添加正确的请求头;若用form-data,确保无文件上传场景下参数填写正确。 - 提交JSON格式数据:选择
raw->JSON输入JSON字符串(如{"name": "xxx"}),同时在Headers里添加Content-Type: application/json。此时CodeIgniter的$this->input->post()无法直接读取JSON数据,需手动解析:$input = json_decode(file_get_contents('php://input'), true); $name = $input['name'] ?? null;
2. 关闭或绕过CSRF防护
CodeIgniter默认开启CSRF防护,浏览器表单会自动携带CSRF token,但Postman不会,导致请求被拦截:
- 开发环境临时关闭:打开
application/config/config.php,修改配置:$config['csrf_protection'] = FALSE; - 生产环境绕过:先访问含表单的页面,从响应HTML中获取
csrf_test_name(或自定义的csrf_token_name)对应的隐藏字段值,在Postman的POST参数中添加该键值对,或在Headers里设置X-CSRF-Token: 你的token值(若配置了token放在请求头)。
3. 验证PHP配置
检查php.ini中的参数,避免因POST数据大小限制导致无法接收:
post_max_size = 8M upload_max_filesize = 2M
修改后重启Web服务器。
4. 调试控制器方法
编写调试代码排查数据传输情况:
public function test() { echo "POST数据:"; print_r($this->input->post()); echo "<br>RAW输入:"; print_r(file_get_contents('php://input')); }
用Postman请求后查看响应,判断是数据未传输还是解析异常。
内容的提问来源于stack exchange,提问作者Nakvi
相关产品推荐
相关产品推荐

