Seu scraper envia cabeçalhos do Chrome perfeitos, roda por trás de um IP residencial limpo e mesmo assim leva um 403 logo na primeira requisição. Sem captcha, sem página de desafio, nada para resolver. O site identificou você antes de um único byte de HTTP ser trocado — durante o handshake TLS.
Este artigo explica como o fingerprinting JA3 e JA4 realmente funciona, por que ele é o cavalo de batalha silencioso de todo grande sistema anti-bot em 2026, e como ver sua própria impressão digital em dez segundos. Se você quer primeiro as ferramentas de bypass, cobrimos isso em Burlando o Fingerprinting TLS com curl_cffi & tls-client — este aqui é o texto complementar sobre como o lado da detecção funciona.
Antes da teoria, olhe para o seu próprio handshake. Abra nosso verificador gratuito de JA3/JA4 — ele devolve a impressão digital TLS que o seu cliente acabou de apresentar e diz com o que ela combina:
# From a terminal - see what curl's TLS looks like:
curl https://www.jibaoproxy.com/tools/fingerprint.html
# Then open the same URL in Chrome and compare.
Rode os dois e você verá o ponto central de todo este artigo: curl e Chrome produzem impressões digitais completamente diferentes, não importa qual cabeçalho User-Agent você defina.
Toda conexão HTTPS começa com uma mensagem ClientHello, enviada em texto puro antes de qualquer criptografia começar. Nela, o seu cliente anuncia:
Eis o insight da detecção: essas listas e sua ordem exata estão embutidas na biblioteca TLS contra a qual o seu cliente foi compilado. O BoringSSL do Chrome anuncia uma combinação específica. O OpenSSL do Python anuncia uma diferente. O crypto/tls do Go, uma terceira. Você não pode mudar isso com cabeçalhos — é negociado abaixo da camada HTTP, pela própria biblioteca.
O JA3 (Salesforce, 2017) concatena cinco campos do ClientHello — versão de TLS, ciphers, extensões, curvas, formatos de ponto — em uma string e aplica o hash MD5:
771,4865-4866-4867-49195-49199,0-23-65281-10-11-35-16,29-23-24,0
|
v MD5
cd08e31494f9531f560d64c695473da9
Um hash por stack TLS. Toda cópia do Chrome 137 no Windows produz (quase) o mesmo JA3; todo python-requests no OpenSSL 3.x produz o mesmo JA3 diferente. Os defensores mantêm tabelas de consulta: hash X = Chrome, hash Y = requests, hash Z = bot em Go. Se o seu User-Agent diz Chrome mas o seu JA3 diz OpenSSL, você é bloqueado — instantaneamente, silenciosamente, de forma barata.
O JA3 tinha problemas: o Chrome começou a randomizar a ordem das extensões em 2023 (quebrando o JA3 ingênuo), e o MD5 não é estruturado — um hash não diz nada sobre por que dois clientes diferem. O JA4 (FoxIO, 2023) corrigiu ambos e é o que os fornecedores sérios usam hoje:
JA4 = t13d1516h2_8daaf6152771_b0da82dd1658
| | |
a: protocol b: ciphers c: extensions
(TLS 1.3, 16 ciphers, (sorted, truncated
h2 ALPN, domain SNI) SHA256)
Todo sistema que importa: o Cloudflare expõe o JA3/JA4 diretamente em suas regras de gerenciamento de bots; o DataDome e o PerimeterX o alimentam em sua pontuação na camada de rede (veja nosso guia de DataDome/PerimeterX); o Akamai roda fingerprinting TLS há mais tempo do que qualquer um. É popular porque é gratuito de computar, impossível de falsificar a partir da camada HTTP, e pega 90% da automação ingênua — todo script de requests/httpx/axios/Go-http já escrito — antes que qualquer JavaScript precise rodar.
Isso surpreende as pessoas: um proxy muda o seu IP, mas o seu handshake TLS passa inalterado. O túnel CONNECT (ou stream SOCKS5) carrega os bytes do seu ClientHello literalmente até o alvo. IP residencial + JA3 da biblioteca requests = "um bot rodando em um IP residencial". Melhor que um IP de datacenter, mas ainda um bot.
O IP e a impressão digital TLS são sinais independentes e você precisa que ambos estejam limpos:
| IP | Impressão digital TLS | Veredito em 2026 |
|---|---|---|
| Datacenter | Biblioteca (requests/Go) | Bloqueado em todo lugar que se importa |
| Residencial | Biblioteca | Bloqueado em sites que verificam JA4 |
| Datacenter | Com impersonação de navegador | Bloqueado por reputação de IP |
| Residencial | Com impersonação de navegador | Passa nas verificações da camada de rede |
Dois caminhos, conforme a ferramenta:
Clientes HTTP — use uma biblioteca de impersonação que reimplemente o ClientHello exato de um navegador: curl_cffi (Python), tls-client (Python/Go), got-scraping (Node). Código completo e funcional no guia do curl_cffi:
from curl_cffi import requests
r = requests.get(
"https://target.example",
impersonate="chrome",
proxies={"https": "socks5h://USERNAME:[email protected]:913"},
)
Navegadores reais (Playwright, agentes de navegador, navegadores anti-detect) — nada a fazer na camada TLS; a impressão digital é genuinamente a do Chrome. Seu risco mora em outro lugar: reputação de IP e detecção de CDP.
Então verifique, não presuma. As versões mudam — uma biblioteca de impersonação fixada no handshake do Chrome 120 é lida como "navegador suspeitosamente desatualizado" em 2026. Refaça o teste após cada atualização de dependência:
Combine seu TLS com impersonação a IPs residenciais — 500MB de tráfego grátis, sem cartão necessário.
Comece o teste gratuitoNovos usuários recebem 500MB ao se cadastrar, mais um bônus na primeira recarga. Oferta por tempo limitado.