PHP中无法获取CURL请求响应体问题求助
问题排查与解决方案
核心问题分析
你的PHP cURL请求返回404,但Postman请求正常,大概率是请求头差异导致服务器识别请求为无效请求。Postman会自动添加一些标准请求头(如User-Agent),而PHP cURL默认的请求头可能不符合服务器的校验规则。
解决步骤与修改代码
1. 开启cURL错误排查并修正请求配置
先添加错误检测逻辑,同时补充Postman默认携带的请求头,修改后的代码如下:
<?php $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://api-dev.meucliente.app.br/api/Login/sistema/forgot-pin?mailto=teste@verificando.com.br'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 关闭响应头与响应体的合并,单独获取响应体 curl_setopt($curl, CURLOPT_HEADER, false); // 模拟Postman的User-Agent标识 curl_setopt($curl, CURLOPT_USERAGENT, 'PostmanRuntime/7.29.0'); // 自动跟随服务器的3xx重定向 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); $resposta = curl_exec($curl); // 排查cURL连接层面的错误 if(curl_errno($curl)){ echo 'cURL错误:' . curl_error($curl); } curl_close($curl); header('Content-Type: application/json'); var_dump($resposta); ?>
2. 关键修改点说明
- 补充
User-Agent头:多数服务器会校验请求的客户端标识,拒绝无标识或不符合规范的请求,模拟Postman的UA可以规避这类校验。 - 关闭
CURLOPT_HEADER:原代码中该参数设为true,会将HTTP响应头和响应体合并返回,不利于查看真实的响应内容;关闭后仅返回接口响应体。 - 开启重定向跟随:如果服务器存在3xx跳转,cURL默认不会自动跟随,添加该参数可确保请求最终到达正确的端点。
3. 极端情况处理:完全复刻Postman请求头
如果上述修改仍无效,可在Postman中点击「Code」按钮选择「cURL」,复制完整的cURL命令,提取其中的所有请求头,通过CURLOPT_HTTPHEADER参数添加到PHP代码中。示例:
curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Accept: */*', 'Cache-Control: no-cache', 'Host: api-dev.meucliente.app.br' ]);
预期验证结果
修改后重新运行脚本,应该能得到与Postman一致的响应:
[ { "Mensagem": "Email não foi encontrado!!", "InnerException": null } ]
内容的提问来源于stack exchange,提问作者Jetro Bernardo
相关产品推荐
相关产品推荐

