You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何检测CURL请求时的无网络连接状态?

检测CURL请求中的无网络连接情况

要检测无网络连接的情况,核心是通过curl_errno()返回的错误码来判断——当无网络或网络不可用时,CURL会返回特定的错误标识。

关键错误码说明

CURL针对网络相关失败定义了明确的错误常量,其中和无网络场景强相关的有:

  • CURLE_COULDNT_RESOLVE_HOST(错误码6):无法解析目标域名,通常是无网络或DNS失效导致
  • CURLE_COULDNT_CONNECT(错误码7):能解析域名但无法建立连接,大概率是本地无网络或目标服务器不可达

修改后的代码实现

在你的原有代码基础上,细化错误判断逻辑,区分无网络类错误和其他CURL错误:

// init curl object
$ch = curl_init();

// define options
$option_array = array(
    CURLOPT_URL => $api_url,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_HEADER => 0,
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_VERBOSE => 0,
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_FAILONERROR => 1
);

// apply options
curl_setopt_array($ch, $option_array);

// execute request and get response
$response = curl_exec($ch);

// 处理错误逻辑
if(curl_errno($ch)){
    $errorCode = curl_errno($ch);
    $errorMsg = curl_error($ch);
    
    // 判断是否为无网络相关错误
    if(in_array($errorCode, [CURLE_COULDNT_RESOLVE_HOST, CURLE_COULDNT_CONNECT])){
        echo '无网络连接或网络不可用:' . $errorMsg;
    } else {
        echo 'CURL请求错误:' . $errorMsg;
    }
} else {
    // 请求成功,返回响应
    return $response;        
}

curl_close($ch);

补充说明

  • 如果需要更精准的本地网络检测,可以在发起CURL请求前,先尝试ping一个可靠的公共地址(比如8.8.8.8),但这种方式需要PHP开启exec()权限,且兼容性不如CURL错误码判断稳定。
  • 注意CURLOPT_SSL_VERIFYPEER => 0会关闭SSL证书验证,生产环境建议开启该验证,避免安全风险。

内容的提问来源于stack exchange,提问作者abu abu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:35:25