Antes de volver a programar, visita el sitio web Free Proxy List y selecciona un proxy que esté más cerca de tu ubicación. Para este ejemplo, seleccionaré un proxy ubicado en Alemania. Anota la dirección IP y el puerto del proxy seleccionado.
Para utilizar un proxy con HttpClient, necesitamos crear una instancia de HttpClientHandler. Dentro de esta instancia, configuramos dos propiedades: la URL del proxy y el puerto, y `ServerCertificateCustomValidationCallback`. Es un nombre largo para una variable, pero es importante.
`ServerCertificateCustomValidationCallback` le indica a HttpClientHandler que ignore cualquier error de certificado HTTPS. Quizás te preguntes por qué tienes que hacer esto.
El servidor proxy intercepta e inspecciona el tráfico, incluido el certificado HTTPS, antes de reenviarlo al servidor de destino. Como resultado, el certificado presentado por el servidor de destino al servidor proxy puede ser diferente del que se presenta al cliente.
Por defecto, HttpClient y otras bibliotecas similares validarán el certificado presentado por el servidor de destino, y si no es válido o no coincide con el presentado al cliente, generarán 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 incluso si el certificado no es 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í:
using var client = new HttpClient(httpClientHandler);
El código completo debería tener este aspecto:
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 devolverá 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.