AWS EC2实例下PHP通过Curl POST数据至API时POST变量传递失败问题
解决Curl POST参数无法传递到PHP服务端的问题
看起来你的Curl请求没把POST参数正确传给服务端,我帮你梳理几个最可能的原因和解决办法:
URL缺少协议头:你调用的
www.mywebsite.org/API/myscript.php没有加上http://或https://前缀,Curl会把它当成相对路径处理,导致请求根本没发送到正确的地址。一定要使用完整的URL,比如http://www.mywebsite.org/API/myscript.php。未明确设置Content-Type请求头:虽然你传的是
application/x-www-form-urlencoded格式的数据,但有些情况下服务端需要明确收到这个头才能正确解析$_POST参数。给Curl加上这个选项:curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));开启Curl错误排查:建议在请求代码里加上错误检查,这样能直接看到请求过程中有没有报错(比如连接失败、DNS解析问题等),方便快速定位:
if(curl_errno($ch)) { echo 'Curl错误信息: ' . curl_error($ch); }
修改后的完整请求端代码如下:
<?php function get_url($url) { $ch = curl_init(); if($ch === false) { die('创建Curl对象失败'); } $data = "password=temp"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 新增:设置Content-Type头 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 新增:检查Curl错误 if(curl_errno($ch)) { echo 'Curl错误信息: ' . curl_error($ch); } $data2 = curl_exec($ch); curl_close($ch); return $data2; } // 使用带协议头的完整URL echo get_url("http://www.mywebsite.org/API/myscript.php"); ?>
先试试把URL补全,加上Content-Type头,应该就能让服务端正确获取到$_POST["password"]了。如果还是有问题,看看Curl输出的错误信息,就能进一步排查啦。
内容的提问来源于stack exchange,提问作者Tristen
相关产品推荐
相关产品推荐

