47 lines
2.0 KiB
C#
47 lines
2.0 KiB
C#
using System.Net;
|
||
|
||
namespace YandexMusic.API.Common;
|
||
|
||
/// <summary>
|
||
/// Фабрика для создания стандартного HttpClient с поддержкой кук, прокси и автоматической декомпрессией.
|
||
/// </summary>
|
||
public static class YandexMusicHttpClientFactory
|
||
{
|
||
/// <summary>
|
||
/// Создаёт стандартный HttpClient с автоматическим управлением куками.
|
||
/// </summary>
|
||
/// <param name="proxy">Прокси-сервер (опционально).</param>
|
||
/// <param name="timeout">Таймаут запросов (по умолчанию 30 секунд).</param>
|
||
/// <param name="userAgent">User-Agent (по умолчанию как у браузера Chrome).</param>
|
||
/// <returns>Настроенный HttpClient.</returns>
|
||
public static HttpClient CreateDefault(
|
||
CookieContainer? cookieContainer = null,
|
||
IWebProxy? proxy = null,
|
||
TimeSpan? timeout = null,
|
||
string? userAgent = null)
|
||
{
|
||
var handler = new HttpClientHandler
|
||
{
|
||
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
|
||
UseCookies = true,
|
||
CookieContainer = cookieContainer ?? new CookieContainer(),
|
||
AllowAutoRedirect = true,
|
||
MaxAutomaticRedirections = 10,
|
||
Proxy = proxy,
|
||
UseProxy = proxy != null
|
||
};
|
||
|
||
var client = new HttpClient(handler, disposeHandler: true)
|
||
{
|
||
Timeout = timeout ?? TimeSpan.FromSeconds(30)
|
||
};
|
||
|
||
// Стандартный User-Agent, похожий на браузерный
|
||
client.DefaultRequestHeaders.Add("User-Agent",
|
||
userAgent ?? "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");
|
||
client.DefaultRequestHeaders.Add("Accept", "*/*");
|
||
client.DefaultRequestHeaders.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8");
|
||
|
||
return client;
|
||
}
|
||
} |