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);
}
}
}