¿Qué son los proxies?
Los proxies, también conocidos como servidores proxy, actúan como intermediarios entre un cliente (como un navegador web o un rastreador) y un servidor de destino (como un sitio web). El cliente envía una solicitud al proxy, que a su vez la reenvía al servidor de destino.
Una vez que el servidor de destino responde, el proxy reenvía la respuesta al cliente. En el web scraping, el uso de proxies permite ocultar la dirección IP del rastreador, lo que evita que el sitio web detecte y bloquee la solicitud.
El uso de varios proxies también puede ayudar a evitar ser detectado y a que te bloqueen. Algunos proveedores de proxies incluso ofrecen la opción de rotar las direcciones IP, lo que proporciona una protección adicional contra el bloqueo de tus solicitudes.
Creación de un proyecto en C#
En este artículo se utilizará Visual Studio 2022 para Windows y .NET 6.0. Para seguir los pasos, abre Visual

En Visual Studio, selecciona C# en el menú desplegable «Todos los lenguajes». Si no ves la plantilla «Aplicación de consola», utiliza el campo «Buscar plantillas» para localizarla. A continuación, haz clic en «Siguiente».
Selecciona la ubicación para tu proyecto en la siguiente pantalla. A continuación, haz clic en «Siguiente» para pasar a la pantalla «Información adicional». Asegúrate de que .NET 7.0 está seleccionado antes de hacer clic en «Crear».

Una vez creado el proyecto, verás el código «Hello World» en la pantalla:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");Realizar una petición HTTP
Hagamos nuestra primera solicitud con `HttpClient`. Sustituye el código de ejemplo por este:
using var client = new HttpClient();
var result = await client.GetStringAsync("https://api.ipify.org?format=json");
Console.WriteLine(result);
Este código utiliza la clase HttpClient del espacio de nombres System.Net.Http para realizar una solicitud HTTP GET al punto final https://api.ipify.org/ y recuperar la respuesta como una cadena.
A continuación se ofrece un desglose del código:
- `using var client = new HttpClient();`: Esta línea crea una nueva instancia de la clase `HttpClient` y la asigna a la variable `client`. La instrucción `using` garantiza la eliminación correcta del objeto `client` una vez que ya no sea necesario.
- `var result = await client.GetStringAsync("https://api.ipify.org/");`: Esta línea utiliza el método `GetStringAsync()` del objeto `client` para enviar una solicitud GET al punto final https://api.ipify.org/. Este método lee la respuesta como una cadena y la almacena en la variable `result`. La palabra clave `await` hace que la solicitud sea asíncrona, lo que permite que el programa continúe ejecutando otro código mientras se procesa la solicitud.
- `Console.WriteLine(result);`: Esta línea muestra en la consola el contenido de la variable `result`, que es la respuesta de la solicitud GET.
Guarda el código y ejecútalo. Verás tu dirección IP en el terminal.
Uso de proxies con HttpClient
Antes de volver a programar, entra en la página web Free Proxy List y selecciona el proxy más cercano a tu ubicación. Para este ejemplo, voy a seleccionar un proxy ubicado en Alemania. Anota la dirección IP y el puerto del proxy seleccionado.
Para utilizar un proxy con HttpClient, debemos crear una instancia de HttpClientHandler. Dentro de esta instancia, configuramos dos propiedades: la URL del proxy y el puerto, así como `ServerCertificateCustomValidationCallback`. Es un nombre bastante largo para una variable, pero resulta importante.
`ServerCertificateCustomValidationCallback` indica a HttpClientHandler que ignore cualquier error relacionado con los certificados HTTPS. Quizás te preguntes por qué hay que hacer esto.
El servidor proxy intercepta e inspecciona el tráfico, incluido el certificado HTTPS, antes de reenviarlo al servidor de destino. Por ello, el certificado que el servidor de destino presenta al servidor proxy puede ser diferente del que se muestra al cliente.
Por defecto, HttpClient y otras bibliotecas similares validan el certificado presentado por el servidor de destino y, si no es válido o no coincide con el presentado al cliente, se produce una excepción. De ahí provienen los errores de certificado.
Ignorar los errores de certificado HTTPS al utilizar el modo proxy permite que la solicitud continúe aunque el certificado no sea válido, lo cual resulta útil en algunos casos en los que el servidor proxy intercepta y modifica el certificado.
Es hora de escribir el código. Empecemos con la instancia de HttpClientHandler:
using System.Net;
using var httpClientHandler = new HttpClientHandler
{
Proxy = new WebProxy("http://5.9.139.204:24000"),
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
Tenemos que proporcionar a la clase HttpClient una instancia de HttpClientHandler. El código del cliente modificado debería quedar así:
utilizando var client = new HttpClient(httpClientHandler);
El código completo debería quedar así:
using System.Net;
using var httpClientHandler = new HttpClientHandler
{
Proxy = new WebProxy("http://5.9.139.204:24000"),
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
using var client = new HttpClient(httpClientHandler);
var result = await client.GetStringAsync("https://api.ipify.org?format=json");
Console.WriteLine(result);
Al ejecutar el código, se mostrará la dirección IP del proxy en lugar de tu dirección IP. Puedes abrir la URL de ipify en tu navegador y comparar los resultados.
Vamos a realizar la autenticación
Al suscribirte a un servicio de proxy premium, recibirás un nombre de usuario y una contraseña para utilizarlos en tu aplicación con fines de autenticación.
Es hora de sustituir la definición de WebProxy por esta:
Proxy = new WebProxy
{
Address = new Uri($"http://5.9.139.204:24000"),
Credentials = new NetworkCredential(
userName: "PROXY_USERNAME",
password: "PROXY_PASSWORD"
)
},
Si sustituyes las credenciales de ejemplo, actualizas la URL del proxy y ejecutas el código, verás que la dirección IP que aparece es diferente a la que utiliza tu ordenador. ¡Pruébalo!
Rotación de proxies
El uso rotativo de proxies resulta beneficioso, ya que ayuda a evitar la detección y evita que los sitios web bloqueen tu dirección IP. Los sitios web pueden supervisar y bloquear las direcciones IP que realizan un número excesivo de solicitudes en un breve periodo de tiempo o aquellas relacionadas con actividades de scraping.
Podemos utilizar el sitio web Free Proxy List para generar una lista de proxies que podamos ir alternando con cada solicitud enviada. Al aplicar esta técnica, cada solicitud tendrá una dirección IP diferente, lo que hará que el sitio web de destino despierte menos sospechas.
Ten en cuenta que la lista de proxies que puedas encontrar en el sitio web puede diferir de la lista que he recopilado. He seleccionado cinco proxies y los he incluido en una lista como esta:
List<string> proxiesList = new List<string> {
"http://65.108.230.238:45977",
"http://163.116.177.46:808",
"http://163.116.177.31:808",
"http://20.111.54.16:80",
"http://185.198.61.146:3128"
};
Elijamos un índice al azar de esta lista y utilicemos el elemento de ese índice seleccionado con la clase Uri:
var random = new Random();
int index = random.Next(proxiesList.Count);
Lo que tenemos que hacer ahora es juntar todas las partes. La versión final del código de tu rastreador debería quedar así:
using System.Net;
List<string> proxiesList = new List<string> {
"http://65.108.230.238:45977",
"http://163.116.177.46:808",
"http://163.116.177.31:808",
"http://20.111.54.16:80",
"http://185.198.61.146:3128"
};
var random = new Random();
int index = random.Next(proxiesList.Count);
using var httpClientHandler = new HttpClientHandler
{
Proxy = new WebProxy(proxiesList[index]),
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
using var client = new HttpClient(httpClientHandler);
var result = await client.GetStringAsync("https://api.ipify.org?format=json");
Console.WriteLine(result);Uso de proxies WebScrapingAPI
Optar por proxies premium de un servicio como WebScrapingAPI es una mejor opción que utilizar proxies gratuitos, ya que son más fiables, más rápidos y ofrecen una mayor seguridad. Los proxies premium son menos propensos a ser bloqueados por los sitios web y tienen un tiempo de respuesta más corto.
En comparación, los proxies gratuitos pueden ser lentos, poco fiables, contener malware y tienen más probabilidades de presentar un alto índice de fallos, ya que el sitio de destino bloqueará tus solicitudes.
¿Te gustaría probar WebScrapingAPI? No hay problema, solo tienes que registrarte para disfrutar de nuestra prueba gratuita de 14 días. Podrás utilizar los 5.000 créditos para probar todas las funciones disponibles.
Una vez que tengas una cuenta, ve al API Playground y selecciona la pestaña «Modo proxy» en la sección «Ejemplos de código».

Ahora utilizaremos la URL del proxy generada en la pestaña «Modo proxy» con nuestra implementación en C#.
Actualiza la URL del proxy y las credenciales en httpClientHandler para que queden así:
using var httpClientHandler = new HttpClientHandler
{
Proxy = new WebProxy
{
Address = new Uri($"http://proxy.webscrapingapi.com:80"),
Credentials = new NetworkCredential(
userName: "webscrapingapi.render_js=0.device=desktop.proxy_type=datacenter",
password: "YOUR_API_KEY"
)
},
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
Puedes utilizar la propiedad «username» para activar o desactivar funciones específicas de la API. Recuerda también introducir tu clave de API en la propiedad «password». Puedes consultar la documentación completa aquí.
Cada vez que ejecutes este código, recibirás una dirección IP diferente, ya que WebScrapingAPI cambia las direcciones IP con cada solicitud. Para obtener más información sobre esta función, consulta la documentación sobre el modo proxy.
También tienes la opción de cambiar entre proxies de centro de datos y proxies residenciales. Encontrarás más detalles al respecto en la sección «Proxies» de nuestra documentación.
Conclusión
El uso de un proxy es un aspecto fundamental del web scraping, ya que permite ocultar la dirección IP y acceder a sitios web restringidos. La biblioteca HttpClient de C# es una potente herramienta para la extracción de datos y, cuando se combina con un proxy fiable, permite llevar a cabo una extracción de datos rápida y eficaz.
Al suscribirte a un servicio de proxies premium como WebScrapingAPI, tendrás acceso a una amplia gama de funciones, entre las que se incluyen la rotación de direcciones IP y la posibilidad de alternar entre proxies de centro de datos y proxies residenciales.
Esperamos que este artículo te haya ayudado a comprender mejor cómo utilizar un proxy con HttpClient y cómo puede serte útil para tus necesidades de scraping. No dudes en registrarte para disfrutar de nuestra prueba gratuita de 14 días, con el fin de probar nuestro servicio y explorar todas sus características y funcionalidades.




