using System.Net; namespace YandexMusic.API.Common.Providers; /// Стандартный провайдер HTTP-запросов с использованием HttpClient. public class DefaultRequestProvider : CommonRequestProvider { /// Инициализирует новый экземпляр провайдера. /// Хранилище авторизации. public DefaultRequestProvider(AuthStorage authStorage) : base(authStorage) { } /// Выполняет HTTP-запрос и возвращает ответ. /// HTTP-запрос. /// Опция завершения запроса. /// HTTP-ответ. public override async Task GetWebResponseAsync( HttpRequestMessage message, HttpCompletionOption completionOption = HttpCompletionOption.ResponseContentRead) { using var handler = new SocketsHttpHandler { Proxy = storage.Context.WebProxy, AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate, UseCookies = true, CookieContainer = storage.Context.Cookies, AllowAutoRedirect = true, MaxAutomaticRedirections = 10 }; using var client = new HttpClient(handler); try { return await client.SendAsync(message, completionOption); } catch (HttpRequestException ex) { // Пытаемся извлечь тело ошибки, если оно доступно if (ex.InnerException == null) throw; throw new Exception($"Ошибка HTTP-запроса: {ex.Message}", ex); } } }