Як використовувати проксі-сервер у C#?

11.04.2025

проксі сервер у c#

 

Проксі-сервери – це свого роду «посередники» між користувачем та інтернетом. Природно, такий інструмент використовується і розробниками на всіх мовах програмування. Проксі сервер у C# має широкі функціональні можливості – дає змогу приховувати реальну IP-адресу, отримувати доступ до будь-якого контенту, розподіляти навантаження між серверами тощо.

Представляємо вашій увазі короткий гайд по роботі з проксі в цій мові програмування. Ми навчимо вас азів – від базового налаштування до розв’язання поширених проблем, які виникають у реальній роботі.

Що таке проксі-сервер і навіщо він потрібен?

Це комп’ютер або програма, що виступає посередником між користувачем та інтернетом. Усі запити надсилаються через проксі. Основні причини їх використання:

  • Анонімність – приховують реальний IP користувача.
  • Доступ до заблокованих ресурсів – можна обійти регіональні обмеження.
  • Безпека – захищають від деяких загроз мережі.
  • Оптимізація трафіку – кешують дані, прискорюючи завантаження сторінок.
  • Розподіл навантаження між серверами.

Існують публічні та приватні проксі. Перший тип доступний усім, другий – вимагає авторизації. Одні з найкращих – мобільні проксі від LTE Socks. Вони поєднують у собі анонімність, продуктивність і стабільність. По суті, ви отримуєте у своє розпорядження реальні IP-адреси мобільних операторів, а отже, для більшості сайтів вас не відрізнити від звичайних користувачів мобільного інтернету.

Як налаштувати проксі в C#?

Є два способи, як налаштувати проксі в C#, – через застарілий WebProxy або більш сучасний HttpClient. Для початку роботи потрібно підготувати робоче оточення.

Підготовка робочого оточення

Переконайтеся, що у вас є всі необхідні інструменти та бібліотеки. Для базової роботи з проксі-сервером у C# вам знадобляться:

  • .NET SDK 6.0+;
  • середовище розробки (Visual Studio, VS Code);
  • простори імен System.Net і System.Net.Http.

Також необхідна бібліотека HtmlAgilityPack для парсингу.

Налаштування проксі через WebProxy

Як підключити проксі в C# через WebProxy? Використовуйте код, але майте на увазі, що це застарілий спосіб – більш сучасний передбачає використання HttpClient:

var proxy = new WebProxy(“http://proxy:port”);

proxy.Credentials = new NetworkCredential(“username”, “password”);

var request = WebRequest.Create(“http://example.com”);

request.Proxy = proxy;

Вказуємо адресу проксі, дані для авторизації та застосовуємо проксі до запиту.

Інтеграція проксі з HttpClient

як налаштувати проксі в c#

Сучасний спосіб через HttpClientHandler:

var handler = new HttpClientHandler

{

Proxy = new WebProxy(“http://proxy:port”)

{

Credentials = new NetworkCredential(“username”, “password”)

},

UseProxy = true

};

using var client = new HttpClient(handler);

Тут ми налаштовуємо обробник запитів із параметрами проксі та передаємо його в HttpClient.

Використання проксі в C# для різних завдань

Проксі-сервер у C# може застосовуватися в різних сценаріях, від простих запитів до складного веб-скрапінгу та інтеграції з API. Розглянемо деякі найпоширеніші завдання і підходи до їх вирішення.

Використання проксі для веб-запитів

Приклад надсилання даних JSON через POST:

// Налаштування HttpClient c проксі

var data = new {

username = “test”,

email = “test@example.com”

};

var json = JsonSerializer.Serialize(data);

var content = new StringContent(json, Encoding.UTF8, “application/json”);

var response = await client.PostAsync(url, content);

У цьому коді відбувається серіалізація об’єкта в JSON, створення об’єкта StringContent, надсилання POST через HttpClient, отримання відповіді.

Робота з проксі для веб-скрапінгу

Веб-скрапінг – це процес автоматичного вилучення даних із веб-сайтів. У практичній роботі часто потрібно надсилати безліч запитів, що може призвести до блокування вашої IP-адреси. Проксі допомагають вирішити цю проблему.

Для скрапінгу важлива ротація проксі:

// Функція для скрапінгу з ротацією проксі

async Task ScrapeWithProxy(string url, Proxy[] proxies) {

// Вибираємо випадковий проксі

var proxy = GetRandomProxy(proxies); 

// Налаштовуємо клієнт

var client = CreateHttpClient(proxy);

// Надсилання запиту

var html = await client.GetStringAsync(url);

// Якщо виникла помилка, запускаємо функцію рекурсивно з новим проксі

}

Якщо виникла помилка, запускаємо функцію Що ми робимо в цьому коді:

  • обираємо випадковий проксі;
  • створюємо HttpClient;
  • обробляємо помилки і виконуємо рекурсивний виклик із новим проксі.

Ось повний код скрапера:рекурсивно з новим проксі

using System;

using System.Collections.Generic;

using System.Net;

using System.Net.Http;

using System.Threading.Tasks;

using HtmlAgilityPack;

public class ProxyRotator

{

private readonly List<string> _proxies;

private readonly Random _random = new Random();

public ProxyRotator(List<string> proxies)

{

_proxies = proxies;

}

public string GetRandomProxy()

{

int index = _random.Next(_proxies.Count);

return _proxies[index];

}

}

async Task<string> ScrapeWithProxyRotationAsync(string url, ProxyRotator rotator)

{

// Отримуємо випадковий проксі

string proxyUrl = rotator.GetRandomProxy();

// Налаштовуємо HttpClient із проксі

var handler = new HttpClientHandler

{

Proxy = new WebProxy(proxyUrl),

UseProxy = true,

// Додаємо таймаут для проксі-з’єднання

Proxy = { UseDefaultCredentials = false }

};

using var client = new HttpClient(handler)

{

Timeout = TimeSpan.FromSeconds(30) // Встановлюємо загальний таймаут

};

try

{

// Імітуємо звичайний браузер

client.DefaultRequestHeaders.Add(“User-Agent”, “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36”);

client.DefaultRequestHeaders.Add(“Accept-Language”, “ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7”);

// Надсилаємо запит

var response = await client.GetAsync(url);

// Якщо отримали помилку (наприклад, 403 Forbidden), пробуємо з іншим проксі

if (!response.IsSuccessStatusCode)

{

Console.WriteLine($”Проксі {proxyUrl} повернув статус {response.StatusCode}. Пробуємо інший…”);

return await ScrapeWithProxyRotationAsync(url, rotator); // Рекурсивний виклик із новим проксі

string htmlContent = await response.Content.ReadAsStringAsync();

// Використовуємо HtmlAgilityPack для парсингу HTML

var htmlDocument = new HtmlDocument();

htmlDocument.LoadHtml(htmlContent);

// Приклад вилучення всіх заголовків h1

var h1Nodes = htmlDocument.DocumentNode.SelectNodes(“//h1”);

if (h1Nodes != null)

{

foreach (var node in h1Nodes)

{

Console.WriteLine($”Заголовок: {node.InnerText.Trim()}”);

}

}

return htmlContent;

}

catch (HttpRequestException ex)

{

Console.WriteLine($“Помилка під час використання проксі {proxyUrl}: {ex.Message}“);

return await ScrapeWithProxyRotationAsync(url, rotator); // Пробуємо з іншим проксі

}

catch (TaskCanceledException)

{

Console.WriteLine($“Таймаут проксі {proxyUrl}. Пробуємо інший…”);

return await ScrapeWithProxyRotationAsync(url, rotator);

}

}

Підключення проксі для API і сервісів

Під час роботи із зовнішніми API і веб-сервісами проксі-сервер у C# корисний для обходу лімітів запитів, забезпечення відмовостійкості та географічного розподілу. Для роботи з API зручно створити спільний клієнт:

public class ApiClient {

private HttpClient _client;

public ApiClient(string proxy) {

// Ініціалізація клієнта з проксі

}

public async Task<string> GetData(string url) {

return await _client.GetStringAsync(url);

}

}

// Використання

var client = new ApiClient(proxy);

var data = await client.GetData(endpoint);

Так ми можемо легко перевикористовувати налаштування проксі в різних запитах до API.

Під час роботи з API, особливо якщо потрібно обробляти велику кількість запитів, варто розглянути використання мобільних проксі від LTE Socks. Вони забезпечують стабільне з’єднання і можливість ротації IP-адрес. Це важливо під час інтеграції з API, що мають обмеження на кількість запитів.

Переваги та недоліки роботи з проксі-сервером у C#

використання проксі в c#

Робота з проксі-сервером у C# має свої плюси і мінуси. До числа перших відносять високу анонімність і безпеку в мережі, доступ до заблокованих ресурсів і можливість розподіляти навантаження між серверами для підвищення стабільності. За бажання можна організувати паралельні запити з різних IP – такий підхід стане в пригоді в програмах для веб-скрапінгу.

З іншого боку, використання проксі в С# ускладнює код і вимагає додаткових налаштувань. У підсумку час розробки та подальшої підтримки коду різко зростає.

Часті помилки та їхнє вирішення під час використання проксі в C#

Під час роботи з проксі в C# можуть бути такі помилки:

  • Проблеми з аутентифікацією – перевірте пару логін-пароль.
  • HTTPS – вимкніть перевірку сертифікатів.
  • Таймаути – додайте таймаути запитів.

У разі блокування IP застосовуйте у своєму коді ротацію проксі.

Висновок: як ефективно використовувати проксі-сервер у C#?

По-перше, для роботи з проксі в C# потрібно вибирати надійного постачальника – такого, як компанія LTE Socks. По-друге, навіть хороші інструменти потрібно час від часу міняти – організуйте в коді ротацію.

У роботі програм може трапитися будь-що – пропишіть, як скрапер або інший ваш застосунок оброблятиме помилки. Фахівці рекомендують використовувати асинхронні виклики – це збільшує стабільність вашого коду.

Перед практичним застосуванням проксі потрібно протестувати їх у чекері. Рекомендуємо Proxy checker онлайн. А ще наша компанія пропонує надійний хостинг сім карт – за бажання ви можете заробити з нами.

Правильне налаштування проксі дасть змогу зробити додатки на C# більш стабільними та безпечними.

Читайте далі

Усі статті