Al final de esta guía de integración de proxy HttpClient C#, sabrás:
- Qué es HttpClient y su rol al hacer solicitudes HTTP en .NET
- Por qué deberías usar un proxy en C#
- Cómo configurar un proxy en HttpClient
- Cómo manejar la autenticación de proxy, errores de certificado SSL y rotación de IP con HttpClient.
¡Comencemos!
¿Qué es HttpClient en .NET?
HttpClient es una clase para hacer solicitudes HTTP y recibir respuestas HTTP en .NET. Es parte del espacio de nombres System.Net.Http, representando el cliente HTTP predeterminado en .NET—y, por lo tanto, en C#.
HttpClient admite:
- Todos los métodos HTTP, incluyendo GET, POST, PUT, PATCH y DELETE
- Comunicación asíncrona
- Personalización de encabezados y cookies
- Personalización del cuerpo de la solicitud
- Integración de proxy
Estas características, junto con su soporte oficial en la Biblioteca Estándar de .NET, hacen de HttpClient una opción popular para solicitudes HTTP en C#.
Por qué necesitas configurar un proxy en C# HttpClient
Al trabajar con scraping web, recolección de datos u otras tareas relacionadas con internet, proteger tu identidad en línea es clave. Una forma de lograrlo es enrutando tu tráfico a través de un servidor proxy.
Un servidor proxy actúa como intermediario entre tú y el sitio de destino, ofreciendo estos beneficios a HttpClient:
- IP y ubicación ocultas: Los servidores de destino ven la IP del proxy, no la tuya.
- Confidencialidad mejorada: Los proxies añaden una capa de privacidad al enmascarar tu identidad real y dificultar el rastreo.
- Evitar bloqueos de IP: Los proxies te ayudan a evitar los limitadores de tasa, lo cual es fundamental en el scraping web con C#.
- Evitar restricciones geográficas: Puedes usar servidores proxy ubicados en regiones específicas para acceder a contenido con restricción geográfica desde tu hogar.
Así, usar proxies en HttpClient no solo aumenta tu seguridad en línea, sino que también mejora la confiabilidad de tus tareas de scraping.
Configurar un proxy con HttpClient en C#: Guía paso a paso
Sigue los pasos a continuación para aprender a integrar un proxy en HttpClient en .NET usando C#.
Requisitos previos
Antes de comenzar, asegúrate de cumplir con los siguientes requisitos previos:
- Un IDE de C#: Puedes usar Visual Studio o Visual Studio Code. En esta guía, usaremos Visual Studio Code con la extensión de C#.
- .NET 8+ instalado localmente: Necesitas la última versión de .NET o cualquier versión LTS mayor o igual a .NET 8. Este tutorial usará .NET 9.
Si no tienes las herramientas requeridas, descárgalas usando el enlace anterior y sigue el asistente de instalación.
Paso #1: Configuración del proyecto
Crea una nueva carpeta para tu proyecto .NET y navega a ella en la terminal con los siguientes comandos:
mkdir httpclient-proxy
cd httpclient-proxy
Luego, inicializa una nueva aplicación de consola .NET dentro de ella:
dotnet run console
La salida debería ser:
The template "Console App" was created successfully.
Ahora, abre la carpeta del proyecto en tu IDE:

Deberías ver los archivos generados por la plantilla, siendo Program.cs el más importante. Actualmente, contiene un script simple “Hello, World!”. Al final de esta sección, ese será un script de integración de proxy HttpClient C#.
Para asegurarte de que todo funcione como se espera, intenta lanzar la aplicación C# con:
dotnet run
El resultado debería ser:
Hello, World!
¡Genial! Ahora tienes un proyecto C# funcionando en Visual Studio Code.
Paso #2: Configurar HttpClient
Agrega las siguientes líneas de código a Program.cs para enviar una solicitud usando HttpClient:
using System.Net;
class Program
{
static async Task Main()
{
// inicializar una instancia de HttpClient
using HttpClient client = new HttpClient();
// la URL de destino
string url = "https://httpbin.org/ip";
// enviar una solicitud GET asíncrona al endpoint
HttpResponseMessage response = await client.GetAsync(url);
// leer el contenido de la respuesta como una cadena
string responseBody = await response.Content.ReadAsStringAsync();
// imprimir la respuesta en la consola
Console.WriteLine(responseBody);
}
}
El fragmento inicializa una instancia de HttpClient y usa su método GetAsync() para conectarse al endpoint GET /ip del proyecto HTTPBin.io. Esa API devuelve la dirección IP del llamante, convirtiéndola en un objetivo perfecto para verificar si la integración del proxy funciona como se espera. ¿La razón? Una vez que integres un proxy en HttpClient, la IP devuelta por el endpoint /ip debe ser diferente de tu IP original.
Si ejecutas el script, la salida debería ser algo como:
{
"origin": "55.17.80.196"
}
La dirección IP contenida en origin representa tu IP de salida.
¡Increíble! Es hora de obtener una URL de proxy válida.
Paso #3: Obtener un proxy
Para integrar un proxy en HttpClient, primero necesitas acceso a un servidor proxy.
Muchos portales en línea ofrecen URLs de proxy gratuitas, pero ten cuidado—ejecutar una infraestructura de proxy es costoso. Si un servicio ofrece proxies gratuitos, considera cuál podría ser su modelo de negocio. A menudo, participan en robo de datos u otras prácticas cuestionables.
Por esa razón, es mejor usar proxies gratuitos solo con fines de aprendizaje y evitarlos para uso en producción.
Si necesitas proxies confiables, considera proveedores reconocidos que ofrezcan pruebas gratuitas o planes gratuitos limitados.
Ahora, una URL de proxy típica sigue este formato:
<protocol>://<host>:<port>
Donde:
protocolespecifica el tipo de proxy (p. ej.,http,https,socks5, etc.)host: El dominio o dirección IP del servidor proxyport: El número de puerto a través del cual se enruta el tráfico
En este ejemplo, supondremos que la URL del proxy es:
http://66.29.154.103:3128
Guárdala en una variable en Program.cs:
string proxyUrl = "http://66.29.154.103:3128";
¡Hora de ver cómo usar un proxy con HttpClient!
Paso #4: Integración del proxy
HttpClient te permite especificar un proxy a través de la clase HttpClientHandler. Eso proporciona control de bajo nivel sobre las solicitudes HTTP enviadas por una instancia de HttpClient.
En particular, HttpClientHandler tiene una propiedad Proxy que acepta un objeto WebProxy que contiene la configuración del servidor proxy:
WebProxy proxy = new WebProxy
{
Address = new Uri(proxyUrl),
};
Luego, pasa proxy a una instancia de HttpClientHandler:
HttpClientHandler handler = new HttpClientHandler
{
Proxy = proxy,
};
Y finalmente pasa HttpClientHandler al constructor de HttpClient:
using HttpClient client = new HttpClient(handler);
¡Maravilloso! Integración de proxy HttpClient C# completada.
Paso #5: Juntando todo
Tu script final de integración de proxy HttpClient debería contener:
using System.Net;
class Program
{
static async Task Main()
{
// inicializar un nuevo objeto proxy
string proxyUrl = "http://66.29.154.103:3128"; // reemplazar con una URL de proxy válida
WebProxy proxy = new WebProxy
{
Address = new Uri(proxyUrl),
};
// definir un manejador de cliente HTTP con el proxy dado
HttpClientHandler handler = new HttpClientHandler
{
Proxy = proxy,
};
// inicializar una instancia de HttpClient con integración de proxy
using HttpClient client = new HttpClient(handler);
// la URL de destino
string url = "https://httpbin.org/ip";
// enviar una solicitud GET asíncrona al endpoint
HttpResponseMessage response = await client.GetAsync(url);
// leer el contenido de la respuesta como una cadena
string responseBody = await response.Content.ReadAsStringAsync();
// imprimir la respuesta en la consola
Console.WriteLine(responseBody);
}
}
Ejecuta el script:
dotnet run
El resultado debería ser:
{
"origin": "66.29.154.103"
}
Ten en cuenta que el atributo origin en la respuesta del endpoint /ip muestra la dirección IP del servidor proxy. Esto confirma que tu IP real se ha ocultado con éxito detrás del proxy.
Advertencia: Los servidores proxy gratuitos suelen tener vida corta y ser poco confiables. Para cuando leas esta guía, el proxy elegido ya no funcionará. Para probar el código, reemplaza proxyUrl con una URL de proxy válida y funcional antes de ejecutar el script.
Casos de uso avanzados para la integración de proxy HttpClient
Acabas de aprender los conceptos básicos de la integración de proxy con HttpClient en C#, pero hay otros escenarios más avanzados que considerar.
Autenticación de proxy
Los proxies premium están protegidos con autenticación para restringir el acceso a usuarios autorizados. En particular, la URL de un proxy autenticado sigue este formato:
<protocol>://<username>:<password>@<host>:<port>
Donde username y password son las credenciales usadas para la autenticación.
En HttpClient, la autenticación de proxy se maneja usando la propiedad Credentials de WebProxy. Esa propiedad acepta un objeto NetworkCredential de la siguiente manera:
WebProxy proxy = new WebProxy
{
Address = new Uri(proxyUrl),
// especificar autenticación de proxy
Credentials = new NetworkCredential("<username>", "<password>"),
};
Extrae <username> y <password> de tu URL de proxy autenticado y reemplázalos en el código anterior.
Entonces, el código para la integración de proxy autenticado queda así:
using System.Net;
class Program
{
static async Task Main()
{
// inicializar un nuevo objeto proxy
string proxyUrl = "<protocol>://<host>:<port>";
WebProxy proxy = new WebProxy
{
Address = new Uri(proxyUrl),
// especificar autenticación de proxy
Credentials = new NetworkCredential("<username>", "<password>"),
};
// definir un manejador de cliente HTTP con el proxy dado
HttpClientHandler handler = new HttpClientHandler
{
Proxy = proxy,
};
// inicializar una instancia de HttpClient con integración de proxy autenticado
using HttpClient client = new HttpClient(handler);
// la URL de destino
string url = "https://httpbin.org/ip";
// enviar una solicitud GET asíncrona al endpoint
HttpResponseMessage response = await client.GetAsync(url);
// leer el contenido de la respuesta como una cadena
string responseBody = await response.Content.ReadAsStringAsync();
// imprimir la respuesta en la consola
Console.WriteLine(responseBody);
}
}
Evitar problemas de certificado SSL
Al configurar un proxy en HttpClient, tus solicitudes pueden fallar debido al siguiente error de verificación de certificado 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
Esto generalmente ocurre cuando el proxy usa un certificado SSL autofirmado.
Si confías en tu servidor proxy—y solo en ese escenario, puedes deshabilitar la verificación SSL para evitar este problema usando el siguiente enfoque:
HttpClientHandler handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
{
return true;
};
using HttpClient client = new HttpClient(handler);
El fragmento anterior sobrescribe el comportamiento de validación de certificado predeterminado con una devolución de llamada personalizada que siempre devuelve true.
Nota: Deshabilitar la verificación SSL hace que tu conexión sea vulnerable a ataques MITM (Man-in-the-Middle). Usa este enfoque solo si confías plenamente en tu proxy y eres consciente de los riesgos de seguridad.
Implementar rotación de proxy
Si dependes del mismo servidor proxy repetidamente, el sitio de destino eventualmente puede bloquear su dirección IP. Para evitarlo, puedes rotar tus servidores proxy en cada solicitud, de modo que tus solicitudes usen un servidor proxy diferente cada vez.
Para implementar la rotación de proxy, sigue este procedimiento
- Llena una lista con muchas URLs de proxy
- Elige aleatoriamente una URL de proxy antes de cada solicitud
- Establece la URL de proxy elegida en HttpClient
El algoritmo anterior se traduce en el siguiente fragmento:
using System.Net;
class Program
{
static async Task Main()
{
// obtener una URL de proxy aleatoria
string selectedProxyUrl = GetRandomProxyUrl();
// configurar el proxy aleatorio
HttpClientHandler handler = new HttpClientHandler
{
Proxy = new WebProxy
{
Address = new Uri(selectedProxyUrl),
},
};
// realizar una solicitud GET a través del proxy aleatorio
using HttpClient client = new HttpClient(handler);
string url = "https://httpbin.org/ip";
HttpResponseMessage response = await client.GetAsync(url);
// leer el contenido de la respuesta como una cadena e imprimirlo
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
static string GetRandomProxyUrl()
{
// la lista de URLs de proxy para rotar
List<string> proxyUrls = new List<string>
{
"<protocol_1>://<proxy_host_1>:<port_1>",
// ...
"<protocol_n>://<proxy_host_n>:<port_n>",
};
// devolver una URL de proxy aleatoria de la lista
Random random = new Random();
int index = random.Next(proxyUrls.Count);
return proxyUrls[index];
}
}
Los principales inconvenientes de este enfoque son:
- Implica código repetitivo
- Requiere acceso a un grupo de servidores proxy confiables, lo que generalmente tiene un costo
Afortunadamente, ¡hay una solución más eficiente para rotar una dirección IP en C#!
Bright Data proporciona proxies rotativos que rotan automáticamente las direcciones IP de salida, eliminando la necesidad de rotación manual de proxy. Cuentan con alrededor de 100 millones de IPs, están disponibles en 195 países, tienen un tiempo de actividad de red excepcional y garantizan una tasa de éxito del 99.9%.
En el próximo capítulo, aprenderás cómo comenzar con los proxies rotativos de Bright Data en HttpClient.
Usar un proxy de Bright Data en HttpClient
Bright Data opera uno de los servidores proxy más grandes del mundo, sirviendo a empresas Fortune 500 y 50,000+ clientes. Esta red de proxy mundial incluye:
- Proxies de centro de datos – Más de 1,300,000+ IPs de centro de datos.
- Proxies residenciales – Más de 400M+ IPs residenciales en más de 195 países.
- Proxies ISP – Más de 1,300,000+ IPs ISP.
Sigue los pasos a continuación para aprender a usar los proxies residenciales de Bright Data con HttpClient en C#.
Si ya tienes una cuenta, inicia sesión en Bright Data. Si no, crea una cuenta y una vez que inicies sesión, serás dirigido a tu panel de usuario:

Haz clic en el botón “View proxy products” para continuar:

Serás redirigido a la página “Proxies & Scraping Infrastructure”:

Desplázate hacia abajo y encuentra la tarjeta “Residential Proxies”. Haz clic en el botón “Get started”:

En la página de configuración de proxy residencial, sigue el asistente para personalizar el servicio según tus necesidades. Si tienes alguna pregunta, no dudes en contactar al soporte 24/7:

Ve a la pestaña “Access parameters” para obtener el host, puerto, usuario y contraseña de tu proxy:

Ten en cuenta que el campo “Host” incluye el puerto.
Ahora que tienes los detalles necesarios, construye tu URL de proxy y úsala con el objeto WebProxy en C#:
WebProxy proxy = new WebProxy
{
Address = new Uri("http://<brightdata_proxy_host>:<brightdata_proxy_port>"),
Credentials = new NetworkCredential("<brightdata_proxy_username>", "<brightdata_proxy_password>"),
};
Reemplaza los marcadores <...> con la información de tu proxy de Bright Data.
Activa la configuración “Active proxy”, sigue las instrucciones restantes, ¡y listo!
Usa el siguiente fragmento de código C# para integrar el proxy de Bright Data en HttpClient:
using System.Net;
class Program
{
static async Task Main()
{
// inicializar un nuevo objeto proxy
WebProxy proxy = new WebProxy
{
// TODO: reemplazar los marcadores con la información de tu proxy de Bright Data
Address = new Uri("http://<brightdata_proxy_host>:<brightdata_proxy_port>"),
Credentials = new NetworkCredential("<brightdata_proxy_username>", "<brightdata_proxy_password>"),
};
// definir un manejador de cliente HTTP con el proxy dado
HttpClientHandler handler = new HttpClientHandler
{
Proxy = proxy,
};
// deshabilitar la verificación SSL
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
{
return true;
};
// inicializar una instancia de HttpClient con integración de proxy
using HttpClient client = new HttpClient(handler);
// la URL de destino
string url = "https://httpbin.org/ip";
// enviar una solicitud GET asíncrona al endpoint
HttpResponseMessage response = await client.GetAsync(url);
// leer el contenido de la respuesta como una cadena
string responseBody = await response.Content.ReadAsStringAsync();
// imprimir la respuesta en la consola
Console.WriteLine(responseBody);
}
}
Cada vez que ejecutes el script anterior, verás una IP de salida diferente.
¡La rotación de proxy en HttpClient nunca ha sido más fácil con los proxies de auto-rotación de Bright Data!
Conclusión
En este tutorial de integración de proxy, aprendiste por qué es importante usar proxies y cómo integrarlos con HttpClient en C#. Descubriste lo fácil que es configurar un proxy en HttpClient, la biblioteca de cliente HTTP predeterminada en .NET.
A través de esta guía, también entendiste por qué confiar en servicios de proxy gratuitos es arriesgado. En su lugar, necesitas usar proxies confiables de un proveedor de proxy reconocido. Y cuando se trata del mejor proveedor de proxy rotativo del mercado, no busques más allá de Bright Data.
¡Crea una cuenta y comienza a probar nuestros proxies gratis hoy mismo!