Как установить прокси с помощью HttpClient в .NET с помощью C#

Освойте интеграцию прокси-сервера C# HttpClient с помощью этого пошагового руководства. Узнайте о настройке, аутентификации, работе с SSL и ротации IP-адресов для безопасных веб-запросов.
5 мин. чтения
How to Set a Proxy Using HttpClient blog image

К концу этого руководства по интеграции прокси HttpClient C# вы будете знать:

  • Что такое HttpClient и его роль в выполнении HTTP-запросов в .NET
  • Почему вы должны использовать прокси в C#
  • Как настроить прокси в HttpClient
  • Как обрабатывать аутентификацию через прокси, ошибки SSL-сертификата и ротацию IP-адресов с помощью HttpClient.

Давайте погрузимся!

Что такое HttpClient в .NET?

HttpClient – это класс для выполнения HTTP-запросов и получения HTTP-ответов в .NET. Он является частью пространства имен System.Net.Http, представляя собой HTTP-клиент по умолчанию в .NET и, следовательно, в C#.

HttpClient поддерживает:

  • Все методы HTTP, включая GET, POST, PUT, PATCH и DELETE.
  • Асинхронная связь
  • Заголовки и настройка cookie
  • Настройка тела запроса
  • Интеграция прокси-сервера

Эти возможности, а также официальная поддержка в стандартной библиотеке .NET, делают HttpClient популярным выбором для выполнения HTTP-запросов на C#.

Зачем нужно устанавливать прокси в C# HttpClient

При работе с веб-скраппингом, сбором данных и другими задачами, связанными с Интернетом, защита вашей личности в сети является ключевым фактором. Один из способов добиться этого – маршрутизация трафика через прокси-сервер.

Прокси-сервер действует как посредник между вами и конечным сайтом, предоставляя эти преимущества HttpClient:

  • Скрытый IP и местоположение: Серверы назначения видят IP прокси-сервера, а не ваш.
  • Повышенная конфиденциальность: Прокси добавляют уровень конфиденциальности, маскируя вашу реальную личность и затрудняя слежку за вами.
  • Избегайте запретов IP-адресов: Прокси помогают обходить ограничители скорости, что очень важно при веб-скреппинге с помощью C#.
  • Обход геоограничений: Вы можете использовать прокси-серверы, расположенные в определенных регионах, чтобы получить доступ к контенту с географическими ограничениями из своего дома.

Таким образом, использование прокси в HttpClient не только повышает вашу безопасность в Интернете, но и увеличивает надежность ваших задач по скраппингу.

Настройка прокси с помощью HttpClient в C#: Пошаговое руководство

Следуйте приведенным ниже инструкциям, чтобы узнать, как интегрировать прокси в HttpClient в .NET с помощью C#.

Пререквизиты

Прежде чем приступить к работе, убедитесь, что вы соответствуете следующим требованиям:

  • IDE ДЛЯ РАБОТЫ С C#: Вы можете использовать либо Visual Studio, либо Visual Studio Code. В этом руководстве мы будем использовать Visual Studio Code с расширением C#.
  • .NET 8+, установленный локально: Вам нужна последняя версия .NET или любая LTS-версия, превышающая или равная .NET 8. В этом учебнике будет использоваться .NET 9.

Если у вас нет необходимых инструментов, загрузите их по ссылке выше и следуйте указаниям мастера установки.

Шаг №1: Настройка проекта

Создайте новую папку для проекта .NET и перейдите в нее в терминале с помощью следующих команд:

mkdir httpclient-proxy
cd httpclient-proxy

Затем инициализируйте внутри него новое приложение .NET Console:

dotnet run console

На выходе должно получиться следующее:

The template "Console App" was created successfully.

Теперь откройте папку проекта в вашей IDE:

Program.cs в вашем проекте C#

Вы увидите файлы, созданные шаблоном, среди которых Program.cs является самым важным. В настоящее время он содержит простой скрипт “Hello, World!”. В конце этого раздела это будет сценарий интеграции с прокси C# HttpClient.

Чтобы убедиться, что все работает как надо, попробуйте запустить приложение C# с помощью:

dotnet run

Результат должен быть таким:

Hello, World!

Отлично! Теперь у вас есть рабочий проект на C# в Visual Studio Code.

Шаг #2: Настройка HttpClient

Добавьте следующие строки кода в файл Program.cs, чтобы отправить запрос с помощью HttpClient:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize an HttpClient instance
    using HttpClient client = new HttpClient();

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

Этот фрагмент инициализирует экземпляр HttpClient и использует его метод GetAsync() для подключения к конечной точке /ip GET из проекта HTTPBin.io. Этот API возвращает IP-адрес вызывающей стороны, что делает его идеальной целью для проверки того, работает ли интеграция прокси так, как ожидалось. Причина? Когда вы интегрируете прокси в HttpClient, IP, возвращаемый конечной точкой /ip, должен отличаться от вашего исходного IP.

Если запустить скрипт, на выходе должно получиться что-то вроде:

{
  "origin": "55.17.80.196"
}

IP-адрес, содержащийся в origin, представляет собой ваш выходной IP-адрес.

Потрясающе! Пора получить действительный URL прокси.

Шаг № 3: Получение прокси-сервера

Чтобы интегрировать прокси в HttpClient, вам сначала нужен доступ к прокси-серверу.

Многие онлайн-порталы предлагают бесплатные URL-адреса прокси-серверов, но будьте осторожны – использование инфраструктуры прокси-серверов обходится недешево. Если сервис предлагает бесплатные прокси, подумайте, какова его бизнес-модель. Часто они занимаются кражей данных или другими сомнительными методами.

Поэтому лучше всего использовать бесплатные прокси только в учебных целях и избегать их использования в производстве!

Если вам нужны надежные прокси, обратите внимание на авторитетных провайдеров, которые предлагают бесплатные пробные версии или ограниченные бесплатные планы. Например, вы можете попробовать наши бесплатные прокси.

Типичный URL-адрес прокси-сервера имеет следующий формат:

<protocol>://<host>:<port>

Где:

  • protocol указывает тип прокси (например, http, https, socks5 и т.д.).
  • host: домен или IP-адрес прокси-сервера
  • порт: Номер порта, через который направляется трафик

В этом примере мы предположим, что URL-адрес прокси-сервера будет таким:

http://66.29.154.103:3128

Сохраните это в переменной в файле Program.cs:

string proxyUrl = "http://66.29.154.103:3128";

Пора посмотреть, как использовать прокси с HttpClient!

Шаг № 4: Интеграция прокси-сервера

HttpClient позволяет указать прокси через класс HttpClientHandler. Это обеспечивает низкоуровневый контроль над HTTP-запросами, отправляемыми экземпляром HttpClient.

В частности, HttpClientHandler имеет свойство Proxy, которое принимает объект WebProxy, содержащий настройки прокси-сервера:

WebProxy proxy = new WebProxy
{
  Address = new Uri(proxyUrl),
};

Затем передайте прокси экземпляру HttpClientHandler:

HttpClientHandler handler = new HttpClientHandler
{
    Proxy = proxy,
};

И, наконец, передайте HttpClientHandler в конструктор HttpClient:

using HttpClient client = new HttpClient(handler);

Замечательно! Интеграция прокси HttpClient C# завершена.

Шаг №5: Соберите все вместе

Ваш финальный скрипт интеграции с прокси HttpClient должен содержать:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize a new proxy object
    string proxyUrl = "http://66.29.154.103:3128"; // replace with a valid proxy URL
    WebProxy proxy = new WebProxy
    {
      Address = new Uri(proxyUrl),
    };

    // define an HTTP client handler with the given proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = proxy,
    };

    // initialize an HttpClient instance with proxy integration
    using HttpClient client = new HttpClient(handler);

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

Выполните сценарий:

dotnet run

Результат должен быть таким:

{
  "origin": "66.29.154.103"
}

Обратите внимание, что атрибут origin в ответе от конечной точки /ip отображает IP-адрес прокси-сервера. Это подтверждает, что ваш реальный IP был успешно скрыт за прокси-сервером.

Внимание: Бесплатные прокси-серверы обычно недолговечны и ненадежны. К тому времени, когда вы будете читать это руководство, выбранный прокси-сервер уже не будет работать. Чтобы проверить код, перед запуском скрипта замените proxyUrl на действительный, рабочий URL прокси.

Расширенные сценарии использования интеграции прокси HttpClient

Вы только что изучили основы интеграции прокси с HttpClient в C#, но есть и другие, более сложные сценарии, которые необходимо рассмотреть.

Аутентификация через прокси-сервер

Премиум-прокси защищены аутентификацией, чтобы ограничить доступ авторизованных пользователей. В частности, URL-адрес аутентифицированного прокси имеет следующий формат:

<protocol>://<username>:<password>@<host>:<port>

Где имя пользователя и пароль – это учетные данные, используемые для аутентификации.

В HttpClient аутентификация прокси обрабатывается с помощью свойства Credentials в WebProxy. Это свойство принимает объект NetworkCredential следующим образом:

WebProxy proxy = new WebProxy
{
  Address = new Uri(proxyUrl),
  // specify proxy authentication
  Credentials = new NetworkCredential("<username>", "<password>"),
};

Извлечь и из URL-адреса аутентифицированного прокси и замените их в приведенном выше коде.

Таким образом, код для интеграции аутентифицированного прокси становится:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize a new proxy object
    string proxyUrl = "<protocol>://<host>:<port>";
    WebProxy proxy = new WebProxy
    {
      Address = new Uri(proxyUrl),
      // specify proxy authentication
      Credentials = new NetworkCredential("<username>", "<password>"),
    };

    // define an HTTP client handler with the given proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = proxy,
    };

    // initialize an HttpClient instance with authenticated proxy integration
    using HttpClient client = new HttpClient(handler);

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

Избегайте проблем с SSL-сертификатом

При настройке прокси в HttpClient ваши запросы могут не выполняться из-за ошибки проверки SSL-сертификата, приведенной ниже:

Unhandled exception. System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
 ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot

Обычно это происходит, когда прокси-сервер использует самоподписанный SSL-сертификат.

Если вы доверяете своему прокси-серверу – и только в этом случае, – вы можете отключить проверку SSL, чтобы обойти эту проблему, используя следующий подход:

HttpClientHandler handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
{
  return true;
};

using HttpClient client = new HttpClient(handler);

Приведенный выше фрагмент переопределяет стандартное поведение проверки сертификата с помощью пользовательского обратного вызова, который всегда возвращает true.

Примечание: Отключение проверки SSL делает ваше соединение уязвимым для атак MITM (Man-in-the-Middle). Используйте этот подход только в том случае, если вы полностью доверяете своему прокси-серверу и знаете о рисках безопасности.

Реализуйте ротацию прокси-сервера

Если вы будете постоянно использовать один и тот же прокси-сервер, целевой сайт может в конце концов заблокировать его IP-адрес. Чтобы избежать этого, вы можете чередовать прокси-серверы для каждого запроса, так что ваши запросы каждый раз используют разные прокси-серверы.

Чтобы реализовать ротацию прокси, выполните следующие действия

  1. Наполните список множеством URL-адресов прокси-серверов
  2. Случайно выбирайте URL-адрес прокси перед каждым запросом
  3. Установите выбранный URL прокси в HttpClient

Приведенный выше алгоритм преобразуется в следующий фрагмент:

using System.Net;

class Program
{  
  static async Task Main()
  {
    // get a random proxy URL
    string selectedProxyUrl = GetRandomProxyUrl();

    // configure the random proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = new WebProxy
      {
        Address = new Uri(selectedProxyUrl),
      },
    };

    // perform a GET request through the random proxy
    using HttpClient client = new HttpClient(handler);
    string url = "https://httpbin.org/ip";
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string and print it
    string responseBody = await response.Content.ReadAsStringAsync();
    Console.WriteLine(responseBody);
  }

  static string GetRandomProxyUrl()
  {
    // the list of proxy URL to rotate from
    List<string> proxyUrls = new List<string>
        {
            "<protocol_1>://<proxy_host_1>:<port_1>",
            // ...
            "<protocol_n>://<proxy_host_n>:<port_n>",
        };

    // return a random proxy URL from the list
    Random random = new Random();
    int index = random.Next(proxyUrls.Count);
    return proxyUrls[index];
  }
}

Основными недостатками этого подхода являются:

  • Он включает в себя шаблонный код
  • Для этого требуется доступ к пулу надежных прокси-серверов, что обычно обходится недешево.

К счастью, существует более эффективное решение для поворота IP-адреса в C#!

Bright Data предоставляет вращающиеся прокси, которые автоматически меняют выходные IP-адреса, избавляя от необходимости ручной ротации прокси. Они могут похвастаться наличием около 100 миллионов IP-адресов, доступны в 195 странах, имеют исключительное время безотказной работы сети и гарантируют 99,9 % успеха.

В следующей главе вы узнаете, как начать работу с вращающимися прокси Bright Data в HttpClient.

Использование яркого прокси данных в HttpClient

Bright Data управляет одним из крупнейших прокси-серверов в мире, обслуживающим компании из списка Fortune 500 и более 20 000 клиентов. Эта всемирная сеть прокси-серверов включает в себя:

Следуйте приведенным ниже инструкциям, чтобы узнать, как использовать жилые прокси Bright Data с HttpClient в C#.

Если у вас уже есть учетная запись, войдите в Bright Data. Если нет, создайте учетную запись бесплатно. После входа в систему вы попадете на панель пользователя:

Приборная панель Bright Data после входа в систему

Нажмите кнопку “Просмотр прокси-продуктов”, чтобы продолжить:

Нажав на просмотр прокси-продуктов

Вы будете перенаправлены на страницу “Прокси и инфраструктура скрапинга”:

Главная страница Прокси-серверы и инфраструктура скрапинга

Прокрутите страницу вниз и найдите карточку “Residential Proxies”. Нажмите кнопку “Приступить”:

Начало работы с жилыми прокси-серверами

На странице настройки прокси-сервера для жилых помещений следуйте указаниям мастера, чтобы настроить сервис в соответствии с вашими потребностями. Если у вас возникнут вопросы, обращайтесь в круглосуточную службу поддержки:

Настройка услуги в соответствии с вашими потребностями

Перейдите на вкладку “Параметры доступа”, чтобы узнать хост, порт, имя пользователя и пароль вашего прокси-сервера:

Параметры доступа для новой зоны

Обратите внимание, что поле “Хост” включает порт.

Теперь, когда у вас есть необходимые данные, создайте URL прокси и используйте его с помощью объекта WebProxy в C#:

WebProxy proxy = new WebProxy
{
  Address = new Uri("http://<brightdata_proxy_host>:<brightdata_proxy_port>"),
  Credentials = new NetworkCredential("<brightdata_proxy_username>", "<brightdata_proxy_password>"),
};

Замените замените прокси-информацией Bright Data.

Включите настройку “Активный прокси”, следуйте остальным инструкциям, и все готово!

Используйте следующий фрагмент кода C# для интеграции прокси Bright Data в HttpClient:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize a new proxy object
    WebProxy proxy = new WebProxy
    {
      // TODO: replace the placeholders with your Bright Data's proxy info
      Address = new Uri("http://<brightdata_proxy_host>:<brightdata_proxy_port>"),
      Credentials = new NetworkCredential("<brightdata_proxy_username>", "<brightdata_proxy_password>"),
    };

    // define an HTTP client handler with the given proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = proxy,
    };

    // disable SSL verification
    handler.ClientCertificateOptions = ClientCertificateOption.Manual;
    handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
    {
      return true;
    };

    // initialize an HttpClient instance with proxy integration
    using HttpClient client = new HttpClient(handler);

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

Каждый раз, когда вы будете запускать вышеприведенный скрипт, вы будете видеть разный IP-адрес выхода.

Ротация прокси HttpClient еще никогда не была такой простой с авторотацией прокси Bright Data!

Заключение

В этом уроке по интеграции прокси вы узнали, почему использование прокси важно и как интегрировать их с HttpClient в C#. Вы узнали, как легко настроить прокси в HttpClient, стандартной библиотеке HTTP-клиента в .NET.

Благодаря этому руководству вы также поняли, почему полагаться на бесплатные прокси-сервисы рискованно. Вместо этого нужно использовать надежные прокси от авторитетного прокси-провайдера. И когда речь заходит о лучшем прокси-провайдере на рынке, обратите внимание на Bright Data.

Создайте аккаунт и начните тестировать наши прокси бесплатно уже сегодня!

Кредитная карта не требуется