Я тут по совету одного регистранта решил кое-что автоматизировать на своем предприятии.
Данная программа должна проверять доступность сайтов из белого списка, и недоступность их черного.
Пока занимаюсь белым списком.
Столкнулся с тем, что для некоторых сайтов прилетает ошибка доступа, хотя в браузере они открываются нормально. Аналих показал, что как правило это редирект, или уже совсем непонятно почему сайт возвращает страницу вместе с ошибкой 403, например.
using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading;
using System.IO;
using System.Reflection;
namespace ConsoleApp1
{
    class Program
    {
        public static List <String> RequestResult = new List<string>();
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            TryToGetUrl("http://wlist.edu-nv.ru/export.txt");
            while(RequestResult.Count == 0)
            {
                Thread.Sleep(10);
            };
            String[] WList = RequestResult[0].Split('\n');
            foreach(string WListUrl in WList)
            {
                if (WListUrl != "")
                {
                    TryToGetUrlWithCheck(WListUrl);
                    Thread.Sleep(100);
                }
                else
                    continue;
            }
            Console.ReadKey();
        }
        static async void TryToGetUrl(String Url)
        {
            using (HttpClient client = new HttpClient())
            {
                try
                {
                    HttpResponseMessage response = await client.GetAsync(Url);                  
                    response.EnsureSuccessStatusCode();
                    string responseBody = await response.Content.ReadAsStringAsync();
                    RequestResult.Add(responseBody);
                    LogAdd(Url + " - Ok!");
                }
                catch (HttpRequestException e)
                {
                    LogAdd(e.Message + " - " + Url);
                }                
            }
        }
        static async void TryToGetUrlWithCheck(String Url)
        {
            using (HttpClient client = new HttpClient())
            {
                try
                {
                    client.Timeout = System.TimeSpan.FromSeconds(30);
                    HttpResponseMessage response = await client.GetAsync(Url);
                    response.EnsureSuccessStatusCode();
                    if (response.IsSuccessStatusCode)
                    {
                        LogAdd(Url + " - Ok!");
                    }
                }
                catch (HttpRequestException e)
                {
                    LogAdd(e.Message + " - " + Url);
                }
            }
        }
        public static void LogAdd(string Msg)
        {
            try
            {
                string path = @"" + Assembly.GetExecutingAssembly().Location + "-" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                StreamWriter sw = File.AppendText(path);
                sw.WriteLine(DateTime.Now.ToString() + " " + Msg);
                sw.Close();
            }
            catch (Exception ex)
            {
            }
        }
    }
}
Прошу так же покритиковать ход мысли в работе с асинхронными методами.





