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

如何用PHP cURL检测REST API状态?构建服务宕机重试通知机制

如何使用PHP的cURL检测REST API是否宕机并实现重试通知机制?

没问题,我来帮你搞定这个API宕机检测的需求!下面是完整的实现方案,包含基础检测逻辑、重试机制和通知功能:

一、基础的API可用性检测逻辑

首先,我们用PHP的cURL工具发起请求,通过超时设置和错误捕获来判断API是否宕机。核心参数说明:

  • CURLOPT_FAILONERROR: 当HTTP状态码大于等于400时,将cURL请求标记为失败
  • CURLOPT_CONNECTTIMEOUT: 设置连接到服务器的最大超时时间(秒)
  • CURLOPT_TIMEOUT: 设置整个cURL请求的最大执行时间(秒)

基础检测的代码片段如下:

function checkApi($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7); // 连接超时7秒
    curl_setopt($ch, CURLOPT_TIMEOUT, 7); // 总请求超时7秒
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将结果返回而不是直接输出
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 如果是HTTPS,暂时关闭证书验证(生产环境建议开启)
    
    $response = curl_exec($ch);
    $error = curl_error($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    curl_close($ch);
    
    // 判断是否宕机:请求失败、有错误、或者HTTP状态码异常
    if (!$response || $error || $httpCode >= 500) {
        return false;
    }
    return true;
}

二、实现重试机制与管理员通知

根据你的需求:若服务宕机达7秒则重试一次,重试失败则发送通知,我们可以在基础检测的基础上封装一层逻辑:

function monitorApi($url, $adminEmail) {
    // 第一次检测
    $isAlive = checkApi($url);
    
    if (!$isAlive) {
        echo "第一次检测API宕机,开始重试...\n";
        // 重试一次(可选:重试前短暂等待,避免立即重试的网络波动问题)
        sleep(1);
        $isAlive = checkApi($url);
        
        if (!$isAlive) {
            echo "重试失败,发送通知给管理员...\n";
            // 发送通知(这里以邮件为例,可替换为短信、企业微信等)
            $subject = "紧急通知:API服务宕机";
            $message = "检测到API服务 {$url} 已宕机,两次检测均失败,请及时处理!";
            $headers = "From: monitoring@yourdomain.com\r\n";
            
            mail($adminEmail, $subject, $message, $headers);
        } else {
            echo "重试成功,API恢复正常\n";
        }
    } else {
        echo "API运行正常\n";
    }
}

// 使用示例
$apiUrl = "https://your-rest-api.com/health";
$adminEmail = "admin@yourdomain.com";
monitorApi($apiUrl, $adminEmail);

补充说明

  • 生产环境中,建议开启CURLOPT_SSL_VERIFYPEER并配置正确的CA证书,保障HTTPS请求的安全性
  • 通知方式可以根据需求扩展,比如调用短信API、发送企业微信机器人消息等
  • 可以把这个脚本加入定时任务(比如Linux的crontab),实现周期性的API监控

内容的提问来源于stack exchange,提问作者Kuldeep Singh Potiwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:41:42