Skip to main content
Piloterr
Retour au blog
21 juin 2026

hellojs vs undici : pourquoi votre scraper Node est bloqué sur JA4

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) :

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 :

  1. TLS/H2 réaliste: clients d'usurpation dédiés (curl-impersonate, uTLS, reqwest-impersonate, etc.), ou les articles Piloterr sur hellojs et wreq
  2. En-têtes cohérents: Générateur d'en-têtes de requête Chrome
  3. Proxies managés et automatisation navigateur si nécessaire: API Web Scraping Piloterr

Pour aller plus loin

À lire aussi

Guides et actualités sur le scraping web, les proxies et l'extraction de données.

RNet : client HTTP Python ultra-rapide avec empreinte TLS avancée

RNet : client HTTP Python ultra-rapide avec empreinte TLS avancée et émulation navigateur. Contournez les systèmes anti-bot grâce aux performances Rust.

Josselin Liebe
Josselin Liebe
Lire

Wreq : client HTTP Rust pour l'émulation navigateur et le fingerprinting TLS

Découvrez Wreq, le client HTTP Rust pour l''émulation navigateur et le fingerprinting TLS. Contournez les systèmes anti-bot avec des exemples pratiques de web scraping.

Josselin Liebe
Josselin Liebe
Lire

Qu'est-ce que le fingerprinting TLS ?

Transport Layer Security (TLS) est un protocole de sécurité qui chiffre l'ensemble du trafic internet pour renforcer la sécurité en ligne. Des méthodes cryptographiques sont utilisées pour sécuriser les communications web entre un client et un serveur. Le handshake TLS désigne la procédure de démarrage d'une session de communication via TLS.

Josselin Liebe
Josselin Liebe
Lire

Prêt à commencer ?

Votre API de scraping web est à un clic. Commencez avec +500 crédits, sans infrastructure à gérer, sans proxies à configurer, et sans carte bancaire.

Commencer gratuitement (+500 crédits)