首次使用PHP调用API返回空值,求问题排查及正确示例
问题排查和修正方案
1 核心错误点
- CURLOPT_SSL_VERIFYPEER参数类型错误:你传入的是字符串
"false",实际需要传入布尔值false。字符串"false"在PHP中会被判定为真值,依然会执行SSL证书校验,若目标API的SSL证书不被服务器信任,会直接请求失败返回空。 - 缺少HTTP响应状态码校验:你当前仅判断了cURL的底层错误,没有获取接口返回的HTTP状态码(比如404路径不存在、403权限错误、500服务端错误等),无法定位服务端返回的问题。
- 提交参数的编码方式可以优化:直接拼接字符串如果后续加参数容易出错,推荐用数组传参再通过
http_build_query编码,避免手动编码出错的问题。
2 修正后的代码
<?php // 测试员工分类接口 $curl = curl_init(); $postData = [ 'apiKey' => '123qwe456rty678yui' ]; curl_setopt_array($curl, array( CURLOPT_URL => "https://www.somedomain.com/api/en/1001/cat/10", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_POSTFIELDS => http_build_query($postData), CURLOPT_HTTPHEADER => array( "Content-Type: application/x-www-form-urlencoded" ), )); $response = curl_exec($curl); $err = curl_error($curl); // 新增获取HTTP响应状态码 $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if ($err) { echo "cURL 错误:" . $err; } else { echo "HTTP 状态码: " . $httpCode . "<br>"; echo "原始响应内容: "; var_dump($response); // 尝试解析JSON返回 $jsonData = json_decode($response, true); if(json_last_error() === JSON_ERROR_NONE) { echo "<br>解析后的JSON内容: "; print_r($jsonData); } } ?>
3 后续调试步骤
- 运行修正后的代码先看HTTP状态码:如果是404说明接口路径拼接错误,核对API的基础路径和请求路径是否匹配;如果是403说明apiKey权限校验失败;如果是5xx说明服务端内部错误。
- 如果状态码为200但响应仍为空,可先通过接口调试工具测试接口本身是否正常返回,排除本地网络、服务器防火墙限制出站请求的问题。
内容的提问来源于stack exchange,提问作者Brincar Brincadeira
相关产品推荐
相关产品推荐

