Заметки · 18.04.2025

А доступен ли сайт?

Сегодняшняя тема уже рассматривалась здесь, но в контексте IDE Lazarus и библиотеки Synapse (все посты по тегу). Запостить этот «самособой-код» на шарпе я решил после реализации задачи с действием на основе доступности веб-проекта. Самый важный момент — код должен уметь проверять сайты по https и работать в Linux.

Использовать буду дистрибутив Ubuntu Server 20.04.6 LTS с установленным Mono. Чуть ниже расскажу как установить Mono в этот дистрибутив (на более поздние дистрибутивы установка ничем не отличается) и проводить сборку cs файлов.

Метод для проверки доступности сайта будет выглядеть вот так:

 public static bool SiteAvailability(string url)
 {
     ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 
         | SecurityProtocolType.Tls 
         | SecurityProtocolType.Tls11 
         | SecurityProtocolType.Tls12;
     WebRequest request = WebRequest.Create(url);
     try
     {
         HttpWebResponse response = (HttpWebResponse)request.GetResponse();
         if (response == null || response.StatusCode != HttpStatusCode.OK)
         {
             return false;
         }
         else
         {
             return true;
         }
     }
     catch
     {
         return false;
     }
 }

Теперь создадим cs файл вот такого вида:

using System;
using System.Net;

namespace testsite
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // Переменная с адресом сайта
            string url = "https://ngdream.ru";

            // Условие с выводом сообщений о состоянии сайта
            if (SiteAvailability(url))
            {
                Console.WriteLine("Сайт " + url + " доступен!");
            }
            else
            {
                Console.WriteLine("Сайт " + url + " недоступен!");
            }
        }

        // Метод проверки доступности сайта
        public static bool SiteAvailability(string url)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
                | SecurityProtocolType.Tls
                | SecurityProtocolType.Tls11
                | SecurityProtocolType.Tls12;
            WebRequest request = WebRequest.Create(url);
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                if (response == null || response.StatusCode != HttpStatusCode.OK)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            catch
            {
                return false;
            }
        }
    }
}

Сохраним его под именем testsite.cs и забросим в директорию. Я обычно использую каталог scripts в корне диска. Можно приступать к установке пакета Mono:

sudo apt-get install mono-complete -y

Как только установка будет завершена попробуем скомпилировать testsite.cs в исполняемый файл и запустить. Команды вводим построчно, игнорируя комментарии:

# Переходим в папку с файлом testsite.cs
# В моём случае - папка scripts в корне файловой системы
cd /scripts

# Компилируем файл cs в exe с помощью компилятора mcs
mcs testsite.cs

# Запускаем файл testsite.exe с помощью mono
mono testsite.exe

Если всё прошло успешно — программа выдаст нам ответ.