Al final de esta guía de integración de proxy HttpClient C#, usted sabrá:
- Qué es HttpClient y su papel en la realización de peticiones HTTP en .NET
- Por qué utilizar un proxy en C#
- Cómo configurar un proxy en HttpClient
- Cómo manejar la autenticación proxy, los errores de certificado SSL y la rotación de IP con HttpClient.
Sumerjámonos.
¿Qué es HttpClient en .NET?
HttpClient es una clase para realizar peticiones HTTP y recibir respuestas HTTP en .NET. Forma parte del espacio de nombres System.Net.Http
, que representa el cliente HTTP predeterminado en .NET y, por lo tanto, en C#.
HttpClient es compatible:
- Todos los métodos HTTP, incluidos GET, POST, PUT, PATCH y DELETE
- Comunicación asíncrona
- Personalización de cabeceras y cookies
- Solicitar personalización del cuerpo
- Integración de proxy
Estas características, junto con su soporte oficial en la Librería Estándar .NET, hacen de HttpClient
una elección popular para peticiones HTTP en C#.
Por qué es necesario establecer un proxy en C# HttpClient
Cuando se trabaja con web scraping, recopilación de datos u otras tareas relacionadas con Internet, proteger su identidad en línea es clave. Una forma de conseguirlo es enrutar el tráfico a través de un servidor proxy.
Un servidor proxy actúa como intermediario entre usted y el sitio de destino, proporcionando estos beneficios a HttpClient:
- IP y ubicación ocultas: Los servidores de destino ven la IP del proxy, no la tuya.
- Mayor confidencialidad: Los proxies añaden una capa de privacidad al enmascarar tu identidad real y dificultar tu rastreo.
- Evite las prohibiciones de IP: Los proxies te ayudan a eludir los limitadores de velocidad, algo fundamental en el web scraping con C#.
- Evita las restricciones geográficas: Puedes utilizar servidores proxy situados en regiones específicas para acceder a contenidos con restricciones geográficas desde tu casa.
Por lo tanto, el uso de proxies en HttpClient no sólo aumenta su seguridad en línea, sino que también mejora la fiabilidad de sus tareas de scraping.
Configurar un Proxy con HttpClient en C#: Guía Paso a Paso
Siga los siguientes pasos para aprender a integrar un proxy en HttpClient en .NET usando C#.
Requisitos previos
Antes de empezar, asegúrese de que cumple los siguientes requisitos previos:
- UN IDE DE C#: Puede utilizar Visual Studio o Visual Studio Code. En esta guía, utilizaremos Visual Studio Code con la extensión C#.
- .NET 8+ instalado localmente: Necesita la última versión de .NET o cualquier versión LTS superior o igual a .NET 8. En este tutorial se utilizará .NET 9.
Si no dispone de las herramientas necesarias, descárguelas utilizando el enlace anterior y siga el asistente de instalación.
Paso nº 1: Configuración del proyecto
Cree una nueva carpeta para su proyecto .NET y navegue hasta ella en el terminal con los siguientes comandos:
mkdir httpclient-proxy
cd httpclient-proxy
A continuación, inicialice una nueva aplicación .NET Console en su interior:
dotnet run console
La salida debería ser:
The template "Console App" was created successfully.
Ahora, abra la carpeta del proyecto en su IDE:
Debería ver los archivos generados por la plantilla, siendo Program.cs
el más importante. Actualmente, contiene un simple script “Hello, World!”. Al final de esta sección, será un script de integración proxy C# HttpClient.
Para asegurarse de que todo funciona como se espera, intente lanzar la aplicación C# con:
dotnet run
El resultado debería ser:
Hello, World!
Muy bien. Ya tiene un proyecto C# en Visual Studio Code.
Paso 2: Configurar HttpClient
Añade las siguientes líneas de código a Program.cs
para enviar una petición utilizando 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);
}
}
El fragmento inicializa una instancia de HttpClient
y utiliza su método GetAsync()
para conectarse al punto final /ip
GET del proyecto HTTPBin.io. Esa API devuelve la dirección IP de la persona que llama, lo que la convierte en un objetivo perfecto para comprobar si la integración del proxy funciona como se espera. ¿Por qué? Una vez que integras 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 origen
representa su IP de salida.
¡Increíble! Es hora de conseguir una URL proxy válida.
Paso nº 3: Recuperar un proxy
Para integrar un proxy en HttpClient
, primero necesitas acceso a un servidor proxy.
Muchos portales en línea ofrecen URL proxy gratuitas, pero hay que tener cuidado: gestionar una infraestructura proxy es caro. Si un servicio ofrece proxies gratuitos, considere cuál puede ser su modelo de negocio. A menudo, se dedican al robo de datos u otras prácticas cuestionables.
Por esta razón, es mejor utilizar proxies gratuitos sólo con fines de aprendizaje y evitarlos para su uso en producción.
Si necesita proxies fiables, considere los proveedores de confianza que ofrecen pruebas gratuitas o planes gratuitos limitados. Por ejemplo, puedes probar nuestros proxies gratuitos.
Ahora, una URL proxy típica sigue este formato:
<protocol>://<host>:<port>
Dónde:
protocol
especifica el tipo de proxy (por ejemplo,http
,https
,socks5
, etc.)host
: dominio o dirección IP del servidor proxypuerto
: 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árdalo en una variable en Program.cs
:
string proxyUrl = "http://66.29.154.103:3128";
¡Es hora de ver cómo utilizar un proxy con HttpClient
!
Paso 4: Integración de proxy
HttpClient permite especificar un proxy a través de la clase HttpClientHandler
. Eso proporciona un control de bajo nivel sobre las peticiones 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),
};
A continuación, pasa el proxy
a una instancia de HttpClientHandler
:
HttpClientHandler handler = new HttpClientHandler
{
Proxy = proxy,
};
Y finalmente pasar HttpClientHandler
al constructor HttpClient
:
using HttpClient client = new HttpClient(handler);
¡Maravilloso! Integración proxy HttpClient C# completada.
Paso 5: Ponerlo todo junto
Su script de integración proxy HttpClient final debe contener:
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);
}
}
Ejecuta el script:
dotnet run
El resultado debería ser:
{
"origin": "66.29.154.103"
}
Observe 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 correctamente tras el proxy.
Advertencia: Los servidores proxy gratuitos suelen ser efímeros y poco fiables. Para cuando leas esta guía, el proxy elegido ya no funcionará. Para probar el código, sustituye proxyUrl
por una URL de proxy válida y que funcione antes de ejecutar el script.
Casos de uso avanzados para la integración de proxy HttpClient
Usted acaba de aprender los fundamentos de la integración de proxy con HttpClient en C#, pero hay otros escenarios más avanzados a considerar.
Autenticación proxy
Los proxies Premium están protegidos con autenticación para restringir el acceso a usuarios autorizados. En concreto, la URL de un proxy autenticado sigue este formato:
<protocol>://<username>:<password>@<host>:<port>
Donde nombre de usuario
y contraseña
son las credenciales utilizadas para la autenticación.
En HttpClient
, la autenticación proxy se maneja usando la propiedad Credentials
de WebProxy
. Esa propiedad acepta un objeto NetworkCredential
como el siguiente:
WebProxy proxy = new WebProxy
{
Address = new Uri(proxyUrl),
// specify proxy authentication
Credentials = new NetworkCredential("<username>", "<password>"),
};
Extraer y
de su URL de proxy autenticado y reemplácelos en el código anterior.
Así, el código para la integración de proxy autenticado se convierte en:
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);
}
}
Evitar problemas con los certificados SSL
Al configurar un proxy en HttpClient
, sus peticiones pueden fallar debido al error de verificación del certificado SSL que aparece a continuación:
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 suele ocurrir cuando el proxy utiliza un certificado SSL autofirmado.
Si confías en tu servidor proxy, y sólo en ese caso, puedes desactivar la verificación SSL para evitar este problema de la siguiente manera:
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 anula el comportamiento predeterminado de validación de certificados con una llamada de retorno personalizada que siempre devuelve true
.
Nota: Desactivar la verificación SSL hace que su conexión sea vulnerable a ataques MITM (Man-in-the-Middle). Utilice este método solo si confía plenamente en su proxy y es consciente de los riesgos de seguridad.
Rotación de proxy
Si confía repetidamente en el mismo servidor proxy, el sitio de destino puede llegar a bloquear su dirección IP. Para evitarlo, puede rotar sus servidores proxy para cada petición, de modo que sus peticiones utilicen un servidor proxy diferente cada vez.
Para aplicar la rotación de proxy, siga este procedimiento
- Rellenar una lista con muchas URL de proxy
- Elegir aleatoriamente una URL proxy antes de cada solicitud
- Establecer la URL proxy elegida en HttpClient
El algoritmo anterior se traduce en el siguiente fragmento:
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];
}
}
Los principales inconvenientes de este enfoque son:
- Se trata de código repetitivo
- Requiere acceso a un grupo de servidores proxy fiables, lo que suele tener un coste.
Por suerte, existe una solución más eficaz para rotar una dirección IP en C#.
Bright Data proporciona proxies rotatorios que rotan automáticamente las direcciones IP de salida, eliminando la necesidad de rotación manual del proxy. Cuentan con unos 100 millones de IP, están disponibles en 195 países, tienen un tiempo de actividad de la red excepcional y garantizan una tasa de éxito del 99,9%.
En el próximo capítulo, aprenderá cómo empezar a utilizar los proxies rotativos de Bright Data en HttpClient.
Utilizar un proxy de datos de Bright en HttpClient
Bright Data gestiona uno de los mayores servidores proxy del mundo, que presta servicio a empresas incluidas en la lista Fortune 500 y a más de 20.000 clientes. Esta red mundial de proxy incluye:
- Proxies de centros de datos – Más de 770.000 IP de centros de datos.
- Proxies residenciales: más de 72 millones de IP residenciales en más de 195 países.
- Proxies de I SP – Más de 700.000 IP de ISP.
- Proxies móviles: más de 7 millones de IP móviles.
Siga los siguientes pasos para aprender a utilizar los proxies residenciales de Bright Data con HttpClient en C#.
Si ya tiene una cuenta, inicie sesión en Bright Data. Si no, cree una cuenta gratis. Una vez conectado, accederá a su panel de usuario:
Haga clic en el botón “Ver productos proxy” para continuar:
Será redirigido a la página “Proxies & Scraping Infrastructure”:
Desplácese hacia abajo y busque la ficha “Apoderados residenciales”. Haga clic en el botón “Empezar”:
En la página de configuración del proxy residencial, siga el asistente para personalizar el servicio en función de sus necesidades. Si tienes alguna pregunta, no dudes en ponerte en contacto con el servicio de asistencia 24/7:
Vaya a la pestaña “Parámetros de acceso” para obtener el host, el puerto, el nombre de usuario y la contraseña de su proxy:
Tenga en cuenta que el campo “Host” incluye el puerto.
Ahora que tienes los detalles necesarios, construye tu URL 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>"),
};
Sustituya los con la información del proxy de Bright Data.
Active la opción “Proxy activo”, siga el resto de instrucciones y ¡listo!
Utilice 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()
{
// 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);
}
}
Cada vez que ejecutes el script anterior, verás una IP de salida diferente.
La rotación de proxies HttpClient nunca ha sido tan fácil con los proxies auto-rotativos de Bright Data.
Conclusión
En este tutorial de integración de proxies, has aprendido por qué es importante utilizar proxies y cómo integrarlos con HttpClient en C#. Descubriste lo fácil que es configurar un proxy en HttpClient, la librería cliente HTTP por defecto en .NET.
A través de esta guía, también has entendido por qué confiar en servicios proxy gratuitos es arriesgado. En su lugar, necesita utilizar proxies fiables de un proveedor de proxies de confianza. Y cuando se trata del mejor proveedor de proxy rotativo del mercado, no busque más allá de Bright Data.
Cree una cuenta y empiece a probar nuestros proxies gratis hoy mismo.
No se requiere tarjeta de crédito