Tecnologias e proteções 14 min de leitura

Proxies para web scraping: guia completo de tipos, privacidade e detecção

Guia de proxies para web scraping: datacenter, residenciais e móveis, rotação, verificação de privacidade e proteção contra a detecção.

EW
Equipe Web-Scraping.biz
Coleta de dados para as demandas do negócio
Publicado: 25 abril 2025

O web scraping esbarra quase sempre no mesmo muro: o site percebe que de um mesmo endereço IP chega uma quantidade suspeita de requisições e começa a bloquear, a exibir captchas ou a servir páginas «vazias». Os proxies resolvem esse problema: substituem seu IP real por outro e distribuem a carga. Mas nem todos os proxies são iguais: há dezenas de variantes, e da escolha depende se o seu scraper passa despercebido ou se queima na primeira centena de requisições.

A seguir, um apanhado de todos os principais tipos de proxy, suas propriedades, os níveis de privacidade e a cobrança, além de exemplos de código em várias linguagens.


O que é um proxy e para que ele serve no scraping

Um servidor proxy é um intermediário entre o seu scraper e o site-alvo. A requisição não viaja direto, e sim através do proxy: o site vê o IP do proxy, não o seu. No scraping, isso traz três coisas:

  1. Ocultação do IP real — fica mais difícil identificar e banir a pessoa que está por trás.
  2. Distribuição da carga — um pool de centenas de IPs permite enviar muitas requisições sem estourar os limites de cada endereço individual.
  3. Contorno de restrições geográficas — você pode coletar dados como se estivesse no país de que precisa (os preços, os resultados de busca e o conteúdo dependem com frequência da região).

Classificação por protocolo: HTTP, HTTPS, SOCKS

É a primeira coisa a entender: em que nível o proxy trabalha.

Proxy HTTP

Trabalha apenas com tráfego HTTP. «Entende» a estrutura da requisição HTTP, pode ler e modificar cabeçalhos e fazer cache de respostas. Para scrapear sites comuns, costuma bastar.

Proxy HTTPS (HTTP CONNECT)

O mesmo, mas sabe tunelar tráfego TLS criptografado por meio do método CONNECT. O proxy não vê o conteúdo (ele vai criptografado); limita-se a repassar os bytes. Hoje quase toda a web funciona sobre HTTPS, então o suporte a CONNECT é obrigatório.

SOCKS4 e SOCKS5

O SOCKS trabalha em um nível mais baixo: é um túnel universal para qualquer tráfego TCP (e o SOCKS5, também UDP). O proxy não entra no conteúdo: tanto faz se é HTTP, FTP, WebSocket ou qualquer outra coisa.

Em que SOCKS e um proxy HTTP se diferenciam:

HTTP(S) SOCKS5
Nível De aplicação (entende HTTP) De transporte (só move TCP/UDP)
Pode ler/modificar cabeçalhos Sim Não
Cache Possível Não
Protocolos Apenas HTTP/HTTPS Qualquer TCP, mais UDP
Velocidade Um pouco mais de overhead Costuma ser mais rápido, mais «transparente»
Autenticação Basic/Digest Usuário e senha, GSSAPI

Diferença entre SOCKS4 e SOCKS5:

  • SOCKS4 — antigo: não suporta autenticação por senha, nem IPv6, nem UDP, e não sabe resolver o DNS do lado do proxy (o domínio é convertido em IP na sua máquina; isso é um vazamento, porque pelas consultas DNS dá para deduzir o que você está scrapeando).
  • SOCKS5 — suporta autenticação, IPv6, UDP e resolução DNS remota (socks5h no esquema da URL). Para o scraping é preferível, porque o DNS não vaza.

Regra prática: se estiver em dúvida entre os dois, fique com o SOCKS5 (e use no código o esquema socks5h://, para que o DNS seja resolvido através do proxy).


Classificação pela origem do IP

Muito mais importante do que o protocolo é de onde vem o endereço IP. É justamente isso que determina o quanto você parece «humano» diante dos sistemas anti-bots.

Proxies de datacenter

Os IPs pertencem a provedores de hospedagem e centros de dados (AWS, OVH, Hetzner etc.).

  • ➕ Baratos, muito rápidos, disponíveis aos milhares.
  • ➖ Fáceis de detectar: os sistemas anti-bots mantêm bases com as sub-redes dos centros de dados. Muitos sites bloqueiam esses IPs de forma preventiva.
  • Servem para scrapear sites «tolerantes», sem proteção séria.

Proxies residenciais (residential)

IPs de usuários domésticos reais, atribuídos por provedores de internet (ISPs). O tráfego passa por dispositivos de pessoas de carne e osso (muitas vezes por meio de redes P2P ou SDKs embutidos em aplicativos).

  • ➕ Parecem usuários comuns; é difícil distingui-los do tráfego real.
  • ➖ Mais caros, mais lentos e, às vezes, instáveis.
  • Adequados para sites com proteção séria (marketplaces, redes sociais, buscadores).

Proxies móveis (mobile)

IPs de operadoras de celular (3G/4G/5G). Sua particularidade: as operadoras usam CGNAT, então atrás de um mesmo IP há centenas de assinantes reais.

  • ➕ O nível de confiança mais alto: banir esse IP equivale a banir um monte de gente real, e por isso os sites agem com cautela.
  • ➖ Os mais caros; velocidade e estabilidade inferiores.
  • São usados onde todo o resto cai bloqueado na hora.

Proxies ISP (static residential)

Um híbrido: os IPs pertencem formalmente a um provedor de internet (como os residenciais), mas estão hospedados fisicamente em um datacenter (como os de datacenter).

  • ➕ Velocidade de datacenter + reputação de provedor de internet. São estáticos (não mudam), o que é prático para sessões longas.
  • ➖ Mais caros que os de datacenter.

Comparação rápida por «discrição» e preço:

code
Datacenter   →  ISP   →  Residenciais  →  Móveis
mais baratos/                       mais caros/
mais visíveis                       mais discretos

IPv4 vs IPv6

O espaço de endereços IPv4 se esgotou: há poucos endereços e eles são caros. O IPv6 é praticamente infinito, e por isso os proxies IPv6 saem bem mais baratos.

Mas há uma pegadinha: os proxies IPv6 só funcionam se o site-alvo suporta IPv6. Muitos sites grandes continuam apenas em IPv4, e nesse caso um proxy IPv6 simplesmente não consegue se conectar.

IPv4 IPv6
Disponibilidade de endereços Escassez Praticamente infinita
Preço do proxy Mais alto Mais baixo
Compatibilidade com sites Quase universal Só se o site funciona sobre IPv6
Detecção O IPv4 é mais «familiar» aos anti-bots As sub-redes enormes de um mesmo provedor são banidas em blocos inteiros

Conclusão: o IPv6 compensa pelo preço para scrapear sites que com certeza suportam IPv6 (Google e muitos serviços internacionais). Para o resto, e para a máxima compatibilidade, IPv4.


Níveis de privacidade (anonimato) do proxy

Um proxy pode «entregar você» de várias maneiras, acrescentando cabeçalhos HTTP de serviço à requisição. Conforme o que é transmitido, distinguem-se três níveis.

1. Transparent (transparente)

Transmite seu IP real nos cabeçalhos e declara abertamente que é um proxy.

code
Via: 1.1 proxy
X-Forwarded-For: SEU_IP_REAL

Para o scraping é inútil: o site vê tanto o fato de haver um proxy quanto você. Esses proxies costumam ser instalados em redes corporativas ou públicas para fazer cache.

2. Anonymous (anônimo)

Oculta seu IP real, mas não oculta o próprio fato de usar um proxy.

code
Via: 1.1 proxy
X-Forwarded-For: IP_DO_PROXY   (ou ausente, mas o Via entrega o proxy)

O IP real fica protegido, mas o sistema anti-bots vê o rótulo «isto é um proxy» e pode ficar desconfiado.

3. Elite / High Anonymous (elite)

Não transmite nem seu IP nem sinais de proxy. A requisição parece feita em conexão direta.

code
(nada de Via, X-Forwarded-For, X-Real-IP nem Proxy-Connection)

Por que uns proxies transmitem esses dados e outros não? É questão de configuração do próprio servidor proxy. Os transparentes acrescentam X-Forwarded-For de propósito, para que o servidor de destino conheça o cliente original (foi assim que os proxies de cache e corporativos foram concebidos). Os elite são configurados para limpar todos esses cabeçalhos. Os cabeçalhos que entregam um proxy: Via, X-Forwarded-For, X-Real-IP, Forwarded, Proxy-Connection, X-Proxy-ID.

Para o scraping servem unicamente os proxies elite. Anonymous, por sua conta e risco; transparent, jamais.


Rotação: proxies estáticos e rotativos

  • Estáticos (sticky) — o mesmo IP se mantém por muito tempo. São necessários onde é preciso uma sessão (login, carrinho), para que o site não «perca você» na troca de IP.
  • Rotativos (rotating) — o IP muda automaticamente: a cada requisição ou a cada N minutos. Ideais para a coleta em massa em que a sessão não importa. Com frequência o provedor entrega um único endpoint «gateway» e faz a rotação do lado dele, sobre um pool de milhares de endereços.

TOR como proxy gratuito

O TOR (The Onion Router) é uma rede anônima em que o tráfego atravessa uma cadeia de três nós: de entrada (guard/entry), intermediário (middle) e de saída (exit). Cada camada de criptografia é removida no nó correspondente: daí o roteamento «em cebola». Localmente, o TOR sobe um proxy SOCKS5 (porta 9050 por padrão) ao qual o scraper pode se conectar.

Sim, no TOR também dá para escolher a geografia e os nós. Pelo arquivo de configuração torrc você controla por quais países sair para a internet:

code
# Sair apenas por nós destes países
ExitNodes {us},{de},{nl}
StrictNodes 1

# É possível fixar os nós de entrada/saída por países
EntryNodes {de}
ExcludeNodes {ru},{cn}
ExcludeExitNodes {ru}

Os códigos de país vão entre chaves, conforme a ISO ({us}, {de}, {fr}). StrictNodes 1 proíbe sair da lista indicada. Para trocar de circuito (obter um novo IP de saída) basta enviar o sinal NEWNYM à porta de controle.

Desvantagens do TOR para o scraping:

  • Lento — três saltos mais o congestionamento da rede.
  • Nós de saída em listas negras — a lista de nós de saída é pública, e muitos sites bloqueiam todo o TOR de forma preventiva.
  • Pool de IPs pequeno — os nós de saída se contam aos milhares, não aos milhões como nos provedores residenciais. A rotação é limitada.
  • Vale para tarefas pontuais e experimentos, mas não para scraping industrial.

Listas de proxies gratuitos

A internet está cheia de sites com listas de proxies gratuitos (free proxy lists): milhares de pares IP:porta que você pode baixar agora mesmo. Soa tentador, mas a qualidade deles é sistematicamente ruim:

  • A maioria está morta já no momento do download: sobrevive, com sorte, entre 5 e 20%.
  • Lentos e instáveis — ora respondem, ora não.
  • Com frequência são transparentes — vazam o seu IP.
  • Já figuram em listas negras — milhares de pessoas os usaram antes de você, e os sites sérios os baniram há tempos.
  • Risco de segurança — não se sabe quem mantém o proxy; ele pode interceptar ou alterar o tráfego (especialmente perigoso com HTTP sem criptografia e ao transmitir credenciais).

Conclusão: os proxies gratuitos servem para aprender e para experimentos descartáveis, mas qualquer scraping sério ou comercial exige proxies pagos. Justamente por isso, todo proxy público deve ser verificado antes do uso (veja abaixo).


Verificação (checking) de proxies

Um proxy não pode ser simplesmente pego e usado, sobretudo se vem de listas públicas. É preciso verificá-los, porque eles «morrem» o tempo todo, ficam lentos e mudam de comportamento. O que se verifica:

  1. Se está vivo — se ao menos responde e com qual código.
  2. Velocidade / latência — tempo de resposta (ping, tempo até o primeiro byte). Os lentos são descartados.
  3. Nível de anonimato — se vaza o seu IP real. Verifica-se com uma requisição a um serviço de eco (por exemplo, um endpoint que devolve seu IP e seus cabeçalhos), conferindo se aparecem X-Forwarded-For ou Via.
  4. Geolocalização real — um IP pode se declarar «alemão» e estar de fato em outro país. Confere-se contra uma base GeoIP.
  5. Tipo/reputação — se está em listas negras ou marcado como datacenter/proxy (por meio de serviços de fraud score).
  6. Suporte a HTTPS — se deixa passar o CONNECT e não quebra o TLS.

O verificador mais simples em Python: tentamos chegar a um serviço de eco através do proxy e olhamos o que volta:

python
import requests

def check_proxy(proxy: str, timeout: int = 8):
    proxies = {"http": proxy, "https": proxy}
    try:
        r = requests.get("https://httpbin.org/get",
                         proxies=proxies, timeout=timeout)
        data = r.json()
        origin_ip = data.get("origin")
        headers = data.get("headers", {})
        leaked = any(h in headers for h in
                     ("X-Forwarded-For", "Via", "X-Real-Ip"))
        return {
            "ok": True,
            "ip": origin_ip,
            "anonymous": not leaked,   # True = o IP real não vazou
            "latency": r.elapsed.total_seconds(),
        }
    except Exception as e:
        return {"ok": False, "error": str(e)}

print(check_proxy("http://user:pass@1.2.3.4:8080"))

Como os proxies influenciam a detecção durante o scraping

Um proxy, sozinho, não é uma «capa de invisibilidade». Os sistemas anti-bots (Cloudflare, DataDome, PerimeterX/HUMAN, Akamai) examinam uma infinidade de sinais, e o IP é apenas um deles.

O que entrega um scraper na frente do IP:

  • O tipo de IP. As sub-redes dos centros de dados são conhecidas e recebem o rótulo «não humano». As residenciais e móveis inspiram mais confiança. É o principal fator sobre o qual a escolha do proxy influi.
  • A reputação do IP (fraud score). O histórico do endereço: spam, botnets, banimentos anteriores. Um IP «sujo» denuncia mesmo sendo residencial.
  • A frequência de requisições de um mesmo IP (rate limiting). Requisições demais por segundo = bloqueio. Um pool de proxies com rotação distribui a carga e reduz a frequência por endereço.
  • A distribuição geográfica. Se «um mesmo usuário» pula em um minuto dos Estados Unidos para o Brasil e volta, é um bot evidente. Por isso, dentro de uma mesma sessão convém manter o IP estável.
  • O ASN. O número de sistema autônomo revela a quem o IP pertence (a uma hospedagem ou a um provedor de verdade).

O que os proxies NÃO cobrem (e por que um proxy sozinho não basta):

  • A impressão digital TLS/JA3 — a assinatura do seu handshake TLS. A do requests/curl não se parece com a de um navegador, e aparece através de qualquer proxy.
  • Os cabeçalhos HTTP e sua ordem — um User-Agent torto ou fora do padrão, a ausência dos cabeçalhos habituais de um navegador.
  • O fingerprint do navegador — Canvas, WebGL, fontes, ambiente JS (relevante para navegadores headless).
  • O comportamento — padrões de cliques e navegação rápidos demais, regulares demais, «não humanos».

Conclusão: um proxy de qualidade (residencial ou móvel, elite, com boa reputação) reduz drasticamente a detecção por IP, mas é preciso combiná-lo com cabeçalhos corretos, um fingerprint realista e uma velocidade de requisições razoável. O proxy é condição necessária, mas não suficiente.


Cobrança: o que exatamente você paga

Os provedores cobram de maneiras diferentes, e do modelo depende o que sai mais em conta para a sua tarefa.

  • Por tráfego (per GB). Você paga os gigabytes de dados transferidos; o pool de IPs é enorme e «gratuito». Típico de residenciais e móveis. Perigoso ao scrapear páginas «pesadas» com imagens ou vídeo: a fatura cresce depressa. Para economizar: baixar só o HTML e bloquear o carregamento de arquivos de mídia.
  • Por número de IPs (per IP). Você paga endereços específicos (por exemplo, 100 proxies estáticos datacenter ou ISP) com tráfego ilimitado. Vantajoso com grandes volumes de dados e IPs estáveis.
  • Por portas/threads (per port / per thread). Você paga o número de conexões simultâneas, não o volume. Frequente nos proxies móveis.
  • Por requisições (per request) ou assinatura. Próprio das APIs de scraping prontas, em que o provedor rotaciona os proxies por você e entrega o HTML já pronto.

Como escolher: muitas requisições pequenas a páginas leves → sai melhor per GB ou per request; transferência de grandes volumes → sai melhor per IP com tráfego ilimitado.


Exemplos de código: conexão a um proxy em várias linguagens

O formato da string de proxy é quase universal: esquema://usuario:senha@host:porta, por exemplo http://user:pass@1.2.3.4:8080.

Python — requests (síncrono)

python
import requests

proxies = {
    "http":  "http://user:pass@1.2.3.4:8080",
    "https": "http://user:pass@1.2.3.4:8080",
}

r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(r.json())

# SOCKS5 com DNS remoto (requer o pacote: pip install requests[socks])
socks = {"http": "socks5h://user:pass@1.2.3.4:1080",
         "https": "socks5h://user:pass@1.2.3.4:1080"}
print(requests.get("https://httpbin.org/ip", proxies=socks).json())

Python — httpx (assíncrono, com rotação)

python
import asyncio, httpx, random

POOL = [
    "http://user:pass@1.2.3.4:8080",
    "http://user:pass@5.6.7.8:8080",
]

async def fetch(url):
    proxy = random.choice(POOL)          # IP aleatório do pool a cada requisição
    async with httpx.AsyncClient(proxy=proxy, timeout=10) as client:
        resp = await client.get(url)
        return resp.status_code, resp.text[:80]

async def main():
    tasks = [fetch("https://httpbin.org/ip") for _ in range(5)]
    for code, body in await asyncio.gather(*tasks):
        print(code, body)

asyncio.run(main())

Python — TOR (SOCKS5 + troca de circuito)

python
import requests
from stem import Signal
from stem.control import Controller

proxies = {"http":  "socks5h://127.0.0.1:9050",
           "https": "socks5h://127.0.0.1:9050"}

print(requests.get("https://httpbin.org/ip", proxies=proxies).json())

# Solicitar um novo IP de saída (um circuito novo)
with Controller.from_port(port=9051) as c:
    c.authenticate(password="sua_senha")
    c.signal(Signal.NEWNYM)

Node.js — axios + HttpsProxyAgent

javascript
const axios = require("axios");
const { HttpsProxyAgent } = require("https-proxy-agent");

const agent = new HttpsProxyAgent("http://user:pass@1.2.3.4:8080");

axios.get("https://httpbin.org/ip", { httpsAgent: agent, httpAgent: agent })
  .then(res => console.log(res.data))
  .catch(err => console.error(err.message));

Node.js — SOCKS5

javascript
const axios = require("axios");
const { SocksProxyAgent } = require("socks-proxy-agent");

// socks5h:// — o DNS é resolvido do lado do proxy
const agent = new SocksProxyAgent("socks5h://user:pass@1.2.3.4:1080");

axios.get("https://httpbin.org/ip", { httpAgent: agent, httpsAgent: agent })
  .then(res => console.log(res.data));

Node.js — Puppeteer (navegador headless através de proxy)

javascript
const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({
    args: ["--proxy-server=http://1.2.3.4:8080"],
  });
  const page = await browser.newPage();
  // autenticação no proxy, se for necessária
  await page.authenticate({ username: "user", password: "pass" });
  await page.goto("https://httpbin.org/ip");
  console.log(await page.evaluate(() => document.body.innerText));
  await browser.close();
})();

Go — net/http

go
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    proxyURL, _ := url.Parse("http://user:pass@1.2.3.4:8080")
    client := &http.Client{
        Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)},
    }
    resp, err := client.Get("https://httpbin.org/ip")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}

PHP — cURL

php
<?php
$ch = curl_init("https://httpbin.org/ip");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_PROXY          => "1.2.3.4:8080",
    CURLOPT_PROXYUSERPWD   => "user:pass",
    CURLOPT_PROXYTYPE      => CURLPROXY_HTTP, // ou CURLPROXY_SOCKS5_HOSTNAME
    CURLOPT_TIMEOUT        => 10,
]);
echo curl_exec($ch);
curl_close($ch);

cURL na linha de comando

bash
# Proxy HTTP
curl -x http://user:pass@1.2.3.4:8080 https://httpbin.org/ip

# SOCKS5 com DNS remoto
curl --proxy socks5h://user:pass@1.2.3.4:1080 https://httpbin.org/ip

Checklist final para escolher o proxy de scraping

Tarefa Recomendação
Sites leves sem proteção Proxies datacenter, IPv4
Sites com anti-bots (marketplaces, buscadores) Residenciais, elite, com rotação
Sites ultraprotegidos / redes sociais Proxies móveis
É preciso sessão (login, carrinho) Estáticos (sticky) ISP/residenciais
Só sites com IPv6, economia Proxies IPv6
Experimento pontual / aprendizado TOR ou listas gratuitas (com verificação)
O DNS não pode vazar SOCKS5 com esquema socks5h://

Regras principais:

  1. Escolha anonimato elite: nenhum vazamento de X-Forwarded-For/Via.
  2. Verifique sem exceção qualquer proxy público ou gratuito antes de colocá-lo para trabalhar.
  3. Para os sites protegidos, residenciais ou móveis, não datacenter.
  4. Os proxies cobrem a detecção por IP, mas não por fingerprint: combine-os com cabeçalhos corretos e uma velocidade de requisições razoável.
  5. Calcule a cobrança conforme a sua tarefa: muitas requisições leves → per GB/per request; grandes volumes → per IP.