PHP CURL请求recharge.php无返回响应如何排查修复?
问题修复方案
核心问题原因
- recharge.php 的参数判断逻辑错误:
isset()函数仅判断参数是否存在,不会判断参数值是否为空。你在请求中传递了key参数,只是值为空字符串,所以会进入if(isset($_GET['key']))的空分支,没有任何输出,自然无法拿到返回内容。 - 请求端没有做参数转义,也没有加 CURL 错误判断,出现异常时无法快速定位问题。
修复代码
1. recharge.php 修复
调整参数判断逻辑,同时补全合法分支的返回输出:
<?php // 改用empty判断,同时兼容参数不存在、参数值为空的情况 if(!empty($_GET['key'])){ // 此处为key验证通过后的业务逻辑,需补全返回内容 echo json_encode(['status'=>'true','data'=>'参数合法','result'=>'ok']); }else{ echo json_encode(['status'=>'false','data'=>'API Hit Limit Exceed','result'=>'not']); } // 增加exit避免后续多余输出影响json格式 exit; ?>
2. 请求端代码修复
优化参数编码逻辑,增加错误排查代码,去掉冗余配置:
<?php // recharge url $recharge_url = "http://localhost/api_system/recharge.php"; $key = ""; $number = "9134322935"; $operators = "ada"; $amount = "asa"; // 对参数做urlencode,避免特殊字符导致参数解析错误 $FinalUrl = $recharge_url ."?key=".urlencode($key) ."&number=" . urlencode($number). "&op=" . urlencode($operators) ."&amount=" . urlencode($amount); $durl = curl_init($FinalUrl); curl_setopt($durl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($durl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($durl, CURLOPT_RETURNTRANSFER, true); $resps = curl_exec($durl); // 先判断CURL是否执行出错 if(curl_errno($durl)){ echo "CURL错误:".curl_error($durl); curl_close($durl); exit; } // 打印原始返回内容,方便排查格式问题 echo "原始返回内容:"; var_dump($resps); $res = json_decode($resps); curl_close($durl); echo "<pre>"; print_r($res); ?>
验证方法
你可以直接在浏览器地址栏访问拼接好的$FinalUrl地址,先确认接口本身可以正常输出JSON内容,再运行CURL请求代码做联调。如果需要测试合法分支逻辑,给$key变量赋值非空内容即可。
内容的提问来源于stack exchange,提问作者Sudipto Bain
相关产品推荐
相关产品推荐

