Antes de voltarmos à programação, visite o site Free Proxy List e selecione um proxy que esteja mais próximo da sua localização. Para este exemplo, selecionarei um proxy localizado na Alemanha. Anote o endereço IP e a porta do proxy selecionado.
Para utilizar um proxy com o HttpClient, precisamos de criar uma instância de HttpClientHandler. Dentro desta instância, definimos duas propriedades: o URL do proxy e a porta, e `ServerCertificateCustomValidationCallback`. É um nome longo para uma variável, mas é importante.
`ServerCertificateCustomValidationCallback` diz ao HttpClientHandler para ignorar quaisquer erros de certificado HTTPS. Pode estar a perguntar-se por que tem de fazer isto.
O servidor proxy intercepta e inspeciona o tráfego, incluindo o certificado HTTPS, antes de o reencaminhar para o servidor de destino. Como resultado, o certificado apresentado pelo servidor de destino ao servidor proxy pode ser diferente daquele apresentado ao cliente.
Por predefinição, o HttpClient e outras bibliotecas semelhantes validam o certificado apresentado pelo servidor de destino e, se este não for válido ou não corresponder ao apresentado ao cliente, lançam uma exceção. É daí que provêm os erros de certificado.
Ignorar os erros de certificado HTTPS ao utilizar o modo proxy permite que o pedido continue mesmo que o certificado não seja válido, o que é útil em alguns casos em que o certificado é interceptado e modificado pelo servidor proxy.
É hora de escrever o código. Comecemos pela instância HttpClientHandler:
using System.Net;
using var httpClientHandler = new HttpClientHandler
{
Proxy = new WebProxy("http://5.9.139.204:24000"),
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
Precisamos de fornecer à classe HttpClient uma instância do HttpClientHandler. O código do cliente modificado deve ficar assim:
using var client = new HttpClient(httpClientHandler);
O código completo deve ficar assim:
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);
A execução do código irá devolver o endereço IP do proxy em vez do seu endereço IP. Pode abrir o URL do ipify no seu navegador e comparar os resultados.