Cómo Establecer un Proxy Usando HttpClient en .NET con C#

Domine la integración proxy C# HttpClient con esta guía paso a paso. Aprenda configuración, autenticación, manejo de SSL y rotación de IP para peticiones web seguras.
14 min de lectura
How to Set a Proxy Using HttpClient blog image

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:

Program.cs en su proyecto C

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 proxy
  • puerto: 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

  1. Rellenar una lista con muchas URL de proxy
  2. Elegir aleatoriamente una URL proxy antes de cada solicitud
  3. 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:

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:

Cuadro de mandos de Bright Data tras iniciar sesión

Haga clic en el botón “Ver productos proxy” para continuar:

Haciendo clic en ver productos proxy

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

Página principal de Proxies & Scraping Infrastructure

Desplácese hacia abajo y busque la ficha “Apoderados residenciales”. Haga clic en el botón “Empezar”:

Introducción a los proxies residenciales

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:

Personalización del servicio en función de sus necesidades

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:

Los parámetros de acceso a su nueva zona

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