К концу этого руководства по интеграции прокси 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
является самым важным. В настоящее время он содержит простой скрипт “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-адрес. Чтобы избежать этого, вы можете чередовать прокси-серверы для каждого запроса, так что ваши запросы каждый раз используют разные прокси-серверы.
Чтобы реализовать ротацию прокси, выполните следующие действия
- Наполните список множеством URL-адресов прокси-серверов
- Случайно выбирайте URL-адрес прокси перед каждым запросом
- Установите выбранный 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 клиентов. Эта всемирная сеть прокси-серверов включает в себя:
- Прокси для дата-центров – более 770 000 IP-адресов дата-центров.
- Резидентные прокси – более 72 миллионов резидентных IP-адресов в более чем 195 странах.
- Прокси-провайдеры – более 700 000 IP-адресов провайдеров.
- Мобильные прокси – более 7 миллионов мобильных IP-адресов.
Следуйте приведенным ниже инструкциям, чтобы узнать, как использовать жилые прокси Bright Data с HttpClient в C#.
Если у вас уже есть учетная запись, войдите в 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.
Создайте аккаунт и начните тестировать наши прокси бесплатно уже сегодня!
Кредитная карта не требуется