Я тут по совету одного регистранта решил кое-что автоматизировать на своем предприятии.
Данная программа должна проверять доступность сайтов из белого списка, и недоступность их черного.
Пока занимаюсь белым списком.
Столкнулся с тем, что для некоторых сайтов прилетает ошибка доступа, хотя в браузере они открываются нормально. Аналих показал, что как правило это редирект, или уже совсем непонятно почему сайт возвращает страницу вместе с ошибкой 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)
{
}
}
}
}
Прошу так же покритиковать ход мысли в работе с асинхронными методами.