利用钉钉机器人和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分钟执行一次。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/710563.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年哪4种编程语言最值得学习?看JetBrains报告

六个月前,编程工具界的大牛JetBrains发布了他们的全球开发者年度报告。 小吾从这份报告中挑出了关于全球程序员过去一年使用编程语言的情况和未来的采纳趋势,总结出2024年最值得学习的四种编程语言。一起来看看吧。 JetBrains在2023年中开始,就向全球的编程达人们发出了问卷…

海豚调度异常处理: 使用 arthas 在内存中删除启动失败的工作流

&#x1f4a1; 本系列文章是 DolphinScheduler 由浅入深的教程&#xff0c;涵盖搭建、二开迭代、核心原理解读、运维和管理等一系列内容。适用于想对 DolphinScheduler了解或想要加深理解的读者。祝开卷有益。大数据学习指南 大家好&#xff0c;我是小陶&#xff0c;DolphinSch…

笔记本硬盘对拷:升级硬盘的好方法!

如今电子产品更新换代的速度不断加快&#xff0c;笔记本电脑的配置也日新月异。几年前购买的笔记本硬盘容量350G曾经令你感到相当满意。但时至今日&#xff0c;这样的容量是否已经显得有些落后&#xff1f;如果你想要升级硬盘&#xff0c;笔记本硬盘对拷是一个很好的选择。 需要…

工业园区的弱电智能化总体建设规划

在当今迅速发展的工业环境中&#xff0c;一个高效、智能的工业园区是企业成功的重要基石。随着技术的进步&#xff0c;弱电系统的智能化已不仅仅是便利的象征&#xff0c;更是安全生产和效率提升的必要条件。今天&#xff0c;我们将探讨如何通过弱电智能化系统的总体建设规划来…

建筑八大员证报名一寸彩色照片要求及手机自拍方法解读

在建筑行业&#xff0c;八大员证的持有者是广受尊重的专业人士。然而&#xff0c;要成为一名合格的八大员&#xff0c;首先必须通过资格审核和报名流程。其中重要的一步就是提交一寸彩色照片&#xff0c;以确保个人信息准确无误。那么&#xff0c;你是否清楚报名时照片的要求以…

Stable Diffusion 【AI绘画提示词】摄影效果提示词,超美摄影效果摄影特效!让平凡的照片焕发出独特的魅力!

高端的摄影作品需要的专业设备价格昂贵&#xff0c;并不是一般人能够承受的起的&#xff0c;优质摄影作品对光线等一系列要求也非常的高&#xff0c;而AI摄影就完美的解决了这些问题&#xff0c;只需要配合适当的提示词&#xff0c;这些问题都可以迎刃而解。 AI绘画没灵感&…

2024最新最全【Linux常用指令】从零基础入门到精通,看完这一篇就够了

一些能在手机上运行的渗透工具&#xff0c;如下所示&#xff1a; 1. AndroRAT&#xff1a;一款Android远程管理工具&#xff0c;可用于攻击和控制Android设备。 2. DroidSheep&#xff1a;一款用于截取Android设备上所有网络流量的工具。 3. zANTI&#xff1a;一款用于测试网…

给你一个扫码支付的二维码,如何写测试用例?

前言 面试的时候&#xff0c;经常会临场出题&#xff1a;给你一个xxx, 如何测试, 或者说如何写测试用例&#xff1f;xxx可以是圆珠笔&#xff0c;水杯&#xff0c;电梯等生活中常见的场景。 那么给你一个支付的二维码&#xff0c;如何写测试用例呢&#xff1f; 二维码扫码支…

LDR6020显示器应用:革新连接体验,引领未来显示技术

一、引言 随着科技的飞速发展&#xff0c;显示器作为信息展示的重要载体&#xff0c;其性能和应用场景不断得到拓展。特别是在办公、娱乐以及物联网等领域&#xff0c;用户对显示器的需求越来越多样化。在这一背景下&#xff0c;LDR6020显示器的出现&#xff0c;以其卓越的性能…

[图解]《分析模式》漫谈04-Martin Fowler叫的是哪家的士

1 00:00:01,230 --> 00:00:04,190 今天我们来探讨一个有趣的话题 2 00:00:05,130 --> 00:00:08,350 Martin Fowler&#xff0c;他叫的是哪一家的的士 3 00:00:11,980 --> 00:00:15,240 第2章这里&#xff0c;Martin Fowler写 4 00:00:15,250 --> 00:00:18,550 他…

推荐一款mac截图利器

一、介绍 Longshot 是 macOS 上一款功能丰富的截图工具&#xff0c;它提供了多种截图方式和便捷的标注功能。主要包含以下功能特点&#xff1a; 多种截图方式&#xff1a;Longshot 支持区域截图、全屏截图、窗口截图以及滚动截图。 标注工具&#xff1a;提供了丰富的标注工具…

关闭kylin(麒麟)系统的安全认证(烦人的安全认证)

打开grub sudo vim /etc/default/grup修改安全认证选项 增加12行&#xff0c;把13行注释掉 保存更改, 然后执行下面的命令&#xff1a; sudo sync sudo reboot重启成功后&#xff0c;就关闭了安全认证了~~~~~。 总体来讲&#xff0c;kylin还是基于ubuntu的内核的&#xff0c;…

后端常见问题解答-位运算实际场景讲解

位运算 在计算机存储的世界中&#xff0c;一切都是二进制的&#xff0c;位运算就是对二进制位进行操作的一种运算。位运算是计算机中的一种常见运算&#xff0c;可以用来提高性能和提升代码的可读性。 位运算有很多种&#xff0c;比如与、或、非、异或等&#xff0c;这些运算…

NVIDIA Triton系列01-应用概论

NVIDIA Triton系列01-应用概论 推理识别是人工智能最重要的落地应用&#xff0c;其他与深度学习相关的数据收集、标注、模型训练等工作&#xff0c;都是为了得到更好的最终推理性能与效果。 几乎每一种深度学习框架都能执行个别的推理工作&#xff0c;包括 Tensorflow、Pytorc…

el-table 多选回显,分页回显

实现el-table多选分页回显功能&#xff0c;左侧是分页的数据源&#xff0c;右侧是选择后的人员数据&#xff0c;切换下一页&#xff0c;选中的数据会在左侧表格回显。 实现&#xff1a; <template><el-dialog :title"title" :visible.sync"show"…

【Android面试八股文】你知道如何实现非阻塞式生产者消费者模式吗?

文章目录 这道题想考察什么 ?考察的知识点日常生活中的生产者消费者模式生产者消费者模式简介为什么需要缓冲区?阻塞与非堵塞非阻塞式生产者消费者模式的实现非阻塞式生产者消费者模式的实现阻塞式生产者消费者模式实现特点这道题想考察什么 ? 是否了解非阻塞式生产者消费者…

186.二叉树:二叉搜索树中的插入操作(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

php实现一个简单的MySQL分页

一、案例演示&#xff1a; 二、php 代码 <?php $servername "localhost"; // MySQL服务器名称或IP地址 $username "root"; // MySQL用户名 $password "123456"; // MySQL密码 $dbname "test"; // 要连接…

OpenAI Assistants API:如何使用代码或无需代码创建您自己的AI助手

Its now easier than ever to create your own AI Assistant that can handle a lot of computing tasks for you. See how you can get started with the OpenAI AI Assistant API. 现在比以往任何时候都更容易创建您自己的AI助手&#xff0c;它可以为您处理许多计算任务。了…

【MySQL】事务一

事务一 1.什么是事务2.为什么会存在事务3.事务的版本支持4.事务的提交方式5.事务常见操作方式6.事务隔离级别6.1读未提交【Read Uncommitted】6.2读提交【Read Committed】6.3可重复读【Repeatable Read】6.4串行化【serializable】 点赞&#x1f44d;&#x1f44d;收藏&#x…