Postman请求正常但生成的PHP-CURL代码在本地服务器返回false
问题排查与解决步骤
1. 先添加CURL错误日志定位原因
原代码未捕获请求失败的具体原因,先修改代码打印错误信息:
<?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://XXX/api', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS =>'{ "Username": "user-name", "Password": "pass-word" }', CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'dataType: jsonp' ), )); $response = curl_exec($curl); // 新增错误排查代码 if($response === false){ echo 'CURL错误信息:' . curl_error($curl); } curl_close($curl); echo $response;
执行后可直接获取失败原因,比如SSL证书问题、连接超时、请求格式错误等。
2. 修复POST请求体的格式问题
Postman生成的代码中,请求体的双引号被转成了",这会导致JSON格式无效,直接替换为普通双引号,确保请求体是合法JSON结构。
3. 处理本地SSL证书验证问题
本地服务器可能未信任目标网站的SSL证书,导致请求被拦截,可临时添加以下参数跳过验证(生产环境建议配置合法证书,不建议长期使用):
CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false,
将上述参数加入curl_setopt_array的配置数组中。
4. 清理冗余请求头
data-type: jsonp属于前端跨域场景的配置,多数后端接口不需要该头,尝试移除这个头,仅保留Content-Type: application/json即可。
5. 检查本地网络连通性
确认本地服务器能正常访问目标API地址,可在服务器终端执行命令curl https://XXX/api测试网络连通性,排查防火墙、代理等限制。
内容的提问来源于stack exchange,提问作者Flow
相关产品推荐
相关产品推荐

