PHP使用curl发起GET请求无返回,$output为false是什么原因?
错误原因
- curl错误检测逻辑顺序错误:你将
curl_errno()判断放在了curl_exec()之前,此时请求尚未执行,根本捕获不到请求过程中出现的错误,相当于错误检查完全没生效。 - 缺少HTTPS证书校验配置:请求的是HTTPS协议接口,PHP cURL默认会校验服务端SSL证书,如果你运行环境没有配置根CA证书 bundle,请求会直接失败返回
false。 - 输出逻辑错误:
json_decode()默认返回的是stdClass对象,直接用echo输出对象会抛出PHP错误,就算请求成功也看不到正常输出;另外如果$output是布尔值false,传入json_decode()会直接返回null,没有输出内容。 - 没有判断请求执行结果就直接做后续解析,失败场景没有兜底逻辑。
修复后代码
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.chucknorris.io/jokes/random'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 本地测试环境可临时关闭SSL证书校验,生产环境建议配置CA证书后保持开启校验 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $output = curl_exec($ch); // 把错误判断放到请求执行之后才能正确捕获异常 if(curl_errno($ch)){ echo 'Curl error: ' . curl_error($ch); curl_close($ch); exit; } curl_close($ch); // 第二个参数传true,将返回结果解析为关联数组方便操作 $jsonArrayResponse = json_decode($output, true); // 接口返回的笑话内容存在value字段,直接输出该字段即可 echo $jsonArrayResponse['value']; ?>
内容的提问来源于stack exchange,提问作者Andrew Walker
相关产品推荐
相关产品推荐

