利用钉钉机器人和PHP开发一款免费的网站可用性检测工具,单节点版

前言

手里有几套系统正在运维,需要保障正常运行,所以可用性检测就必不可少啦,
以前本来是用的阿里官方的云监控,但现在价格感觉太贵了,不划算
在这里插入图片描述
那就自己手搓一个简易版的监控吧。

成品效果展示

在这里插入图片描述

代码展示

<?php
// 准备要检查的URL列表
$websites = [
    "官方网站" => "http://iiar.cn",
    "测试站点" =>"https://test.dalezhi.cn",
    // 继续添加更多网站
];
// 各位要换成自己的钉钉机器人token哦
$dingding = "https://oapi.dingtalk.com/robot/send?access_token=****";



foreach ($websites as $name => $url) {
    // 初始化cURL会话
    $ch = curl_init();

    // 设置cURL选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, true); // 获取头信息
    curl_setopt($ch, CURLOPT_NOBODY, true); // 仅获取头信息

    // 执行cURL请求
    curl_exec($ch);

    // 获取HTTP状态码
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    // 关闭cURL会话
    curl_close($ch);

    // 检查HTTP状态码
    if ($http_code == 200) {
        echo $name.'ok <br/>';
    } else {
        $data = [
            "text" => [
                "content" => $name.",无法访问 ".$url
            ],
            "msgtype" => "text"
        ];
        $jsonData = json_encode($data);
        // 初始化cURL会话
        $new_url = curl_init($dingding);
        
        // 设置cURL选项
        curl_setopt($new_url, CURLOPT_POST, true);
        curl_setopt($new_url, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($new_url, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Content-Length: ' . strlen($jsonData)
        ]);
        curl_setopt($new_url, CURLOPT_POSTFIELDS, $jsonData);
        
        // 执行cURL请求并获取响应
        $response = curl_exec($new_url);
        curl_close($ch);
    }
}
?>

这段PHP代码的主要功能是检查一组网站的可访问性,如果某个网站无法访问,就向钉钉机器人发送警报。下面是对代码的详细解释:

<?php
// 准备要检查的URL列表
$websites = [
    "官方网站" => "http://iiar.cn",
    "测试站点" =>"https://test.dalezhi.cn",
    // 继续添加更多网站
];
// 各位要换成自己的钉钉机器人token哦
$dingding = "https://oapi.dingtalk.com/robot/send?access_token=****";
  • 代码首先定义一个关联数组 $websites,其中键是网站的描述,值是网站的URL。
  • 然后定义一个变量 $dingding,保存钉钉机器人的API地址及其访问令牌。
foreach ($websites as $name => $url) {
    // 初始化cURL会话
    $ch = curl_init();
  • 使用 foreach 循环遍历 $websites 数组,每次循环提取一个网站的名称 $name 和 URL $url
  • 使用 curl_init() 初始化一个cURL会话。
    // 设置cURL选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, true); // 获取头信息
    curl_setopt($ch, CURLOPT_NOBODY, true); // 仅获取头信息

    // 执行cURL请求
    curl_exec($ch);

    // 获取HTTP状态码
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    // 关闭cURL会话
    curl_close($ch);
  • 使用 curl_setopt() 设置cURL选项:
    • CURLOPT_URL:设置要请求的URL。
    • CURLOPT_RETURNTRANSFER:将cURL执行结果返回为字符串,而不是直接输出。
    • CURLOPT_HEADERCURLOPT_NOBODY:只获取HTTP头信息,不获取内容。
  • 使用 curl_exec() 执行cURL请求。
  • 使用 curl_getinfo() 获取HTTP状态码。
  • 使用 curl_close() 关闭cURL会话。
    // 检查HTTP状态码
    if ($http_code == 200) {
        echo $name . ' ok <br/>';
    } else {
        $data = [
            "text" => [
                "content" => $name . ", 无法访问 " . $url
            ],
            "msgtype" => "text"
        ];
        $jsonData = json_encode($data);
  • 检查HTTP状态码是否为200(表示请求成功)。
    • 如果成功,输出网站名称和 ‘ok’。
    • 如果不成功,准备发送到钉钉的消息内容,使用关联数组 $data 创建消息体,并将其编码为JSON格式。
        // 初始化cURL会话
        $new_url = curl_init($dingding);
        
        // 设置cURL选项
        curl_setopt($new_url, CURLOPT_POST, true);
        curl_setopt($new_url, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($new_url, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Content-Length: ' . strlen($jsonData)
        ]);
        curl_setopt($new_url, CURLOPT_POSTFIELDS, $jsonData);
        
        // 执行cURL请求并获取响应
        $response = curl_exec($new_url);
        curl_close($new_url);
    }
}
?>
  • 再次初始化一个cURL会话,准备向钉钉发送POST请求。
  • 设置cURL选项:
    • CURLOPT_POST:设置为POST请求。
    • CURLOPT_RETURNTRANSFER:将响应结果返回为字符串。
    • CURLOPT_HTTPHEADER:设置HTTP头信息,包括内容类型和内容长度。
    • CURLOPT_POSTFIELDS:设置POST请求的内容,即之前编码的JSON数据。
  • 执行cURL请求,发送消息到钉钉机器人。
  • 关闭cURL会话。

当然 上面的步骤 只是写了一个检测流程,实际运行的时候 可以借助宝塔的定时任务,实现1分钟执行一次。
在这里插入图片描述

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈钇谷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值