CodeIgniter服务端无法接收curl发送的POST数据问题求助
CodeIgniter服务端无法接收CURL POST数据排查方案
- CodeIgniter框架输入接管问题
CodeIgniter默认对全局超全局变量做了过滤接管,多数版本配置下会清空原生$_REQUEST/$_POST的未校验参数,不建议直接使用原生超全局变量取值。
服务端替换为框架自带的输入方法取值即可:
// CI3 版本写法 $abc = $this->input->post('abc'); // CI4 版本写法 $abc = $this->request->getPost('abc');
- CURL请求头缺失导致解析失败
使用http_build_query传递POST参数时,需要明确指定对应Content-Type,部分服务端环境未开启自动识别时会无法解析POST体,在发送端CURL配置中补充如下代码:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
- 路由重定向丢失POST参数
检查请求地址http://test.com/usage_log是否存在301/302重定向逻辑(比如末尾斜杠自动补全、HTTP跳转HTTPS),重定向过程默认会丢弃POST参数,可以补充CURL配置兼容:
// 开启跟随重定向 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 301/302重定向都保留POST参数 curl_setopt($ch, CURLOPT_POSTREDIR, 3);
- 发送端参数本身异常
检查你已打印的http_build_query($post_data)日志,确认输出是否包含abc=xxx格式内容,如果日志中abc字段为空或者不存在,说明发送端$abc变量本身未定义或值为空。 - CSRF防护拦截参数
如果服务端CodeIgniter开启了全局CSRF校验,未携带合法CSRF令牌的POST请求会被框架直接拦截,参数会被清空,可以临时关闭对应路由的CSRF校验验证是否为该问题。
内容的提问来源于stack exchange,提问作者Zivaan Solutions
相关产品推荐
相关产品推荐

