O que são proxies?
Os proxies, também designados por servidores proxy, actuam como intermediários entre um cliente (como um navegador Web ou um scraper) e um servidor de destino (como um sítio Web). O cliente envia um pedido ao proxy, que o reencaminha para o servidor de destino.
Quando o servidor de destino responde, o proxy envia a resposta de volta para o cliente. No scraping da Web, a utilização de proxies pode mascarar o endereço IP do scraper, impedindo que o sítio Web detecte e bloqueie o pedido.
A utilização de múltiplos proxies também pode ajudar a evitar a deteção e o bloqueio. Alguns fornecedores de proxy até oferecem a opção de rotação de IPs, proporcionando uma proteção adicional contra o bloqueio dos seus pedidos.
Criando um projeto C#
Este artigo utilizará o Visual Studio 2022 para Windows e o .Net 6.0. Para acompanhar, abra o Visual

No Visual Studio, selecione C# no menu pendente Todas as linguagens. Se o modelo da Aplicação de Consola não estiver visível, utilize a entrada Procurar modelos para o localizar. Em seguida, clique em Avançar.
Escolha a localização do seu projeto no ecrã seguinte. Em seguida, clique em Seguinte para avançar para o ecrã Informações adicionais. Certifique-se de que tem o .NET 7.0 selecionado antes de clicar em Criar.

Após a criação do projeto, verá o código Hello World no ecrã:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");Efetuar um pedido HTTP
Vamos fazer nossa primeira requisição com o `HttpClient`. Substitua o código fictício por este:
using var client = new HttpClient();
var result = await client.GetStringAsync("https://api.ipify.org?format=json");
Console.WriteLine(result);
Esse código usa a classe HttpClient do namespace System.Net.Http para fazer uma solicitação HTTP GET para o ponto de extremidade https://api.ipify.org/ e recuperar a resposta como uma cadeia de caracteres.
Segue-se uma análise do código:
- `usando var client = new HttpClient();`: Esta linha cria uma nova instância da classe `HttpClient` e a atribui à variável client. A instrução `using` garante o descarte correto do objeto cliente quando ele não for mais necessário.
- `var result = await client.GetStringAsync("https://api.ipify.org/");`: Esta linha utiliza o método `GetStringAsync()` do objeto cliente para enviar uma solicitação GET para o ponto de extremidade https://api.ipify.org/. Esse método lê a resposta como uma string e a armazena na variável result. A palavra-chave await torna a solicitação assíncrona, permitindo que o programa continue executando outro código enquanto a solicitação está sendo processada.
- `Console.WriteLine(result);`: Esta linha escreve o conteúdo da variável result no console, que é a resposta da solicitação GET.
Guarde o código e execute-o. Verá o seu endereço IP no terminal.
Usando Proxies com HttpClient
Antes de voltarmos à codificação, visite o site Free Proxy List e selecione um proxy que esteja mais próximo da sua localização. Para este exemplo, vou selecionar um proxy localizado na Alemanha. Anote o endereço IP e a porta do proxy selecionado.
Para utilizar um proxy com HttpClient, precisamos criar uma instância de HttpClientHandler. Dentro desta instância, definimos duas propriedades: a URL do proxy e a porta e `ServerCertificateCustomValidationCallback`. Esse é um nome longo para uma variável, mas isso é importante.
O `ServerCertificateCustomValidationCallback` diz ao HttpClientHandler para ignorar qualquer erro de certificado HTTPS. Você pode estar se perguntando por que você tem que fazer isso.
O servidor proxy intercepta e inspecciona 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 do apresentado ao cliente.
Por predefinição, o HttpClient e outras bibliotecas semelhantes validarão o certificado apresentado pelo servidor de destino e, se não for válido ou não corresponder ao apresentado ao cliente, será aberta uma exceção. É daí que surgem os erros de certificado.
Ignorar os erros do certificado HTTPS quando se utiliza 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 é intercetado e modificado pelo servidor proxy.
É hora de escrever o código. Vamos começar com a instância HttpClientHandler:
using System.Net;
using var httpClientHandler = new HttpClientHandler
{
Proxy = new WebProxy("http://5.9.139.204:24000"),
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
Precisamos fornecer à classe HttpClient uma instância do HttpClientHandler. O código do cliente modificado deve ter a seguinte aparência:
using var client = new HttpClient(httpClientHandler);
O código completo deve ter o seguinte aspeto:
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 devolverá o endereço IP do proxy em vez do seu endereço IP. Pode abrir o URL do ipify no seu browser e comparar os resultados.
Vamos fazer a autenticação
Quando se inscreve num serviço proxy premium, recebe um nome de utilizador e uma palavra-passe para utilizar na sua aplicação para autenticação.
É altura de substituir a definição WebProxy por esta:
Proxy = new WebProxy
{
Address = new Uri($"http://5.9.139.204:24000"),
Credentials = new NetworkCredential(
userName: "PROXY_USERNAME",
password: "PROXY_PASSWORD"
)
},
Substituindo as credenciais do marcador de posição, actualizando o URL do proxy e executando o código, verá que o endereço IP impresso é diferente do utilizado pelo seu computador. Experimente!
Proxies rotativos
A rotação de proxies é benéfica, pois ajuda a evitar a deteção e impede que os sítios Web bloqueiem o seu endereço IP. Os sítios Web podem monitorizar e bloquear os endereços IP que fazem pedidos excessivos num curto espaço de tempo ou os que estão ligados a actividades de scraping.
Podemos usar o site Free Proxy List para gerar uma lista de proxies que podemos rodar com cada pedido enviado. Ao implementar esta técnica, cada pedido terá um endereço IP distinto, tornando o sítio Web alvo menos suspeito.
Tenha em atenção que a lista de proxies que pode encontrar no sítio Web pode ser diferente da lista que eu compilei. Escolhi cinco proxies e defini-los numa 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"
};
Vamos escolher um índice aleatório desta lista e utilizar o item desse índice selecionado com a classe Uri:
var random = new Random();
int index = random.Next(proxiesList.Count);
O que precisamos de fazer agora é combinar todas as partes. A versão final do código do seu raspador deve ser a seguinte:
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);Utilização de proxies WebScrapingAPI
Optar por proxies premium de um serviço como o WebScrapingAPI é uma melhor escolha do que utilizar proxies gratuitos, porque são mais fiáveis, mais rápidos e oferecem maior segurança. Os proxies premium são menos susceptíveis de serem bloqueados pelos sítios Web e têm um tempo de resposta inferior.
Em comparação, os proxies gratuitos podem ser lentos, pouco fiáveis, conter malware e é mais provável que tenham uma grande taxa de insucesso porque o sítio de destino bloqueará os seus pedidos.
Interessado em experimentar o WebScrapingAPI? Não há problema, basta inscrever-se no nosso teste gratuito de 14 dias. Pode utilizar os 5.000 créditos para testar todas as funcionalidades disponíveis.
Depois de ter uma conta, vá para o API Playground e escolha o separador Modo Proxy na secção Amostras de código.

Agora vamos usar o URL de proxy gerado no separador Modo de proxy com a nossa implementação C#.
Actualize o URL do proxy e as credenciais no httpClientHandler para que tenham o seguinte aspeto:
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
};
Pode utilizar a propriedade username para ativar ou desativar funcionalidades específicas da API. Lembre-se de definir também a sua chave de API na propriedade password. Pode consultar a documentação completa aqui.
Sempre que executar este código, receberá um endereço IP diferente, uma vez que a WebScrapingAPI roda os IPs em cada pedido. Para saber mais sobre esse recurso, leia a documentação sobre o Modo proxy.
Também tem a opção de alternar entre proxies de centro de dados e residenciais. Pode encontrar mais detalhes sobre isto na secção Proxies da nossa documentação.
Conclusão
A utilização de um proxy é um aspeto essencial da recolha de dados da Web, uma vez que lhe permite ocultar o seu endereço IP e aceder a sítios Web restritos. A biblioteca HttpClient do C# é uma ferramenta poderosa para extrair dados e, quando combinada com um proxy fiável, pode conseguir uma extração de dados eficiente e rápida.
Ao subscrever um serviço de proxy premium como o WebScrapingAPI, terá acesso a uma vasta gama de funcionalidades, incluindo a rotação de IP e a opção de alternar entre proxies de centros de dados e residenciais.
Esperamos que este artigo lhe tenha proporcionado uma compreensão útil da utilização de um proxy com o HttpClient e da forma como pode beneficiar as suas necessidades de scraping. Sinta-se à vontade para se inscrever no nosso teste gratuito de 14 dias, para testar o nosso serviço e explorar todas as caraterísticas e funcionalidades.




