PHP使用CURL发起GET请求返回JSON附带额外字符串问题求助
接口返回重复JSON的修复方案
问题根因
你的PHP代码对响应结果做了两次输出,导致返回内容重复:
- 第一次是
else分支中的echo $response;直接打印了第三方接口返回的JSON数据 - 第二次是代码末尾的
return $response;,如果使用Laravel、ThinkPHP等PHP框架,控制器方法的返回值会被框架自动作为响应内容再次输出,最终两份相同JSON拼接返回。Node环境调用时不会触发框架的自动输出逻辑,因此结果正常。
修复方法
根据你的开发场景二选一即可:
场景1:使用PHP框架开发(推荐方案)
删除echo相关逻辑,所有响应都通过return返回,符合框架开发规范,修改后代码如下:
$curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => 'https://api.rechargeapps.com/selling_plan_groups/', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 50, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'X-Recharge-Access-Token: $token' ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); $allowed_origins = [ // origins ]; if(in_array($request->get_header('origin'), $allowed_origins)) { header("Access-Control-Allow-Origin: {$request->get_header('origin')}"); } // 新增JSON内容类型头,避免前端解析异常 header('Content-Type: application/json; charset=utf-8'); if ($err) { return 'cURL Error #:' . $err; } else { return $response; }
场景2:原生PHP无框架开发
直接删除代码末尾的return $response;语句即可。
附加优化建议
建议添加header('Content-Type: application/json; charset=utf-8');响应头,明确告知前端返回内容为JSON格式,可减少前端解析异常概率。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

