Si vous scrapez avec Node.js en utilisant undici, axios ou node-fetch, les systèmes anti-bot peuvent souvent vous bloquer même lorsque votre User-Agent ressemble exactement à Chrome. La raison n'est pas l'en-tête: c'est l'empreinte TLS et HTTP/2 émise lors de la négociation.
Ce qui fuit dans un client Node typique
Capturez une session Chrome réelle sur tls.peet.ws et comparez-la à la pile par défaut de Node. Chrome sur macOS affiche souvent des valeurs comme :
- JA4 du type
t13d1516h2_8daaf6152771_d8a2da3f94cd(voir la spec JA4+) - Paramètres HTTP/2 Akamai dans l'ordre Chrome avec
WINDOW_UPDATE +15663105 - ALPS, GREASE et partages de clés hybrides
X25519MLKEM768
La pile TLS native de Node ordonne les chiffrements selon les valeurs par défaut OpenSSL, ignore GREASE et envoie les SETTINGS HTTP/2 dans une forme différente. Les gestionnaires de bots (Cloudflare, Akamai, DataDome, PerimeterX) fingerprintent cela avant votre premier octet HTTP.
hellojs : TLS façon Chrome depuis Node
@unreleased/hellojs est un client HTTP Node qui reconstruit la négociation sur le fil pour correspondre à Chrome 147 sur macOS: JA4, Akamai H2, ALPN et ordre d'en-têtes par défaut. Il prend également en charge :
- Le clonage de captures depuis tls.peet.ws via
profiles.registerFromPeet() - HTTP/3 via mise à niveau Alt-Svc
- Proxies SOCKS5 et HTTP CONNECT
Il ne s'exécute pas dans le navigateur: utilisez-le dans votre runtime de scraper, pas dans du code front-end.
Pour l'usurpation TLS dans d'autres runtimes, voir curl-impersonate (Python/C) ou uTLS (Go).
Inspecter les empreintes sans deviner
Utilisez ces outils gratuits de la toolbox Piloterr (navigateur uniquement) :
- Analyseur de capture TLS: collez le JSON de tls.peet.ws
/api/all - Décodeur JA4: décompose une chaîne JA4 en version TLS, ALPN et parties hash
- Décodeur Akamai HTTP/2: décode les chaînes d'empreinte Akamai H2
- Ressources fingerprinting: sites de test, bibliothèques et outils toolbox Piloterr
Quand l'imitation TLS ne suffit pas
Le fingerprinting TLS n'est qu'une couche. Les sites vérifient aussi les signaux du runtime navigateur (canvas, WebGL, navigator.webdriver), la réputation IP et le comportement. Pour du scraping en production à grande échelle, combinez :
- TLS/H2 réaliste: clients d'usurpation dédiés (curl-impersonate, uTLS, reqwest-impersonate, etc.), ou les articles Piloterr sur hellojs et wreq
- En-têtes cohérents: Générateur d'en-têtes de requête Chrome
- Proxies managés et automatisation navigateur si nécessaire: API Web Scraping Piloterr