Se você faz scraping com Node.js usando undici, axios ou node-fetch, sistemas anti-bot podem frequentemente bloqueá-lo mesmo quando seu User-Agent parece exatamente com o do Chrome. O motivo não é o cabeçalho: é a impressão digital TLS e HTTP/2 emitida durante o handshake.
O que vaza em um cliente Node típico
Capture uma sessão real do Chrome em tls.peet.ws e compare-a com a pilha padrão do Node. O Chrome no macOS frequentemente mostra valores como:
- JA4 como
t13d1516h2_8daaf6152771_d8a2da3f94cd(veja especificação JA4+) - Configurações HTTP/2 Akamai na ordem do Chrome com
WINDOW_UPDATE +15663105 - ALPS, GREASE e compartilhamentos de chaves híbridas
X25519MLKEM768
A pilha TLS nativa do Node ordena cifras para os padrões do OpenSSL, ignora GREASE e envia SETTINGS HTTP/2 em uma forma diferente. Gerenciadores de bots (Cloudflare, Akamai, DataDome, PerimeterX) identificam essa impressão digital antes do seu primeiro byte HTTP.
hellojs: TLS no formato do Chrome a partir do Node
@unreleased/hellojs é um cliente HTTP Node que reconstrói o handshake on-the-wire para corresponder ao Chrome 147 no macOS: JA4, H2 Akamai, ALPN e ordenação padrão de cabeçalhos. Ele também suporta:
- Clonar capturas de tls.peet.ws via
profiles.registerFromPeet() - HTTP/3 via upgrade Alt-Svc
- Proxies SOCKS5 e HTTP CONNECT
Ele não é executado no navegador: use-o no seu runtime de scraper, não no código front-end.
Para impersonação TLS em outros runtimes, veja curl-impersonate (Python/C) ou uTLS (Go).
Inspecione impressões digitais sem adivinhar
Use essas ferramentas gratuitas da caixa de ferramentas do Piloterr (apenas navegador):
- TLS Capture Analyzer: cole JSON de tls.peet.ws
/api/all - JA4 Decoder: divida uma string JA4 em partes de versão TLS, ALPN e hash
- HTTP/2 Akamai Decoder: decodifique strings de impressão digital H2 Akamai
- Fingerprinting Resources: sites de teste, bibliotecas e ferramentas da caixa de ferramentas do Piloterr
Quando a mímica TLS não é suficiente
A impressão digital TLS é apenas uma camada. Os sites também verificam sinais do runtime do navegador (canvas, WebGL, navigator.webdriver), reputação do IP e comportamento. Para scraping em produção em escala, combine:
- TLS/H2 realista: clientes de impersonação dedicados (curl-impersonate, uTLS, reqwest-impersonate, etc.), ou artigos do Piloterr sobre hellojs e wreq
- Cabeçalhos consistentes: Chrome Request Headers Builder
- Proxies gerenciados e automação de navegador quando necessário: Piloterr Web Scraping API