Expliqué
L'en-tête User-Agent est l'un des plus anciens éléments d'identification sur le web. Chaque requête HTTP envoyée par un client inclut une ligne `User-Agent:` qui indique le logiciel client (navigateur ou bibliothèque), sa version, le système d'exploitation et souvent le moteur de rendu. Les serveurs l'utilisent pour la négociation de contenu (mises en page mobile ou bureau), l'analyse et, de plus en plus, la détection de bots.
Pour le scraping, le User-Agent est le signal le plus simple à mal configurer. Les User-Agents par défaut des bibliothèques HTTP courantes (`python-requests/2.31.0`, `axios/1.5.0`, `okhttp/4.10.0`) sont des indicateurs évidents. Même le User-Agent par défaut de Playwright et Puppeteer contient `HeadlessChrome`, que les systèmes anti-bot signalent instantanément.
La solution naïve consiste à définir un UA Chrome sur chaque requête. Le problème est que le User-Agent seul ne suffit pas — les empreintes modernes croisent l'UA avec les indices client `sec-ch-ua`, l'empreinte TLS, l'objet JavaScript navigator et l'en-tête Accept-Language. Définir un UA Chrome tout en laissant la négociation TLS de Python exposée crée un signal d'alerte plus important que de laisser simplement le UA par défaut en place.
Comment ça fonctionne
Lorsque votre client ouvre une connexion vers un serveur, la ligne de requête inclut des en-têtes. La ligne `User-Agent` en fait partie. Les serveurs l'analysent (ou la consignent simplement) et acheminent la requête en fonction de ce qu'ils voient. Un User-Agent Chrome moderne sous Windows ressemble à : `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`. Le préfixe 'Mozilla/5.0' est historique ; tous les navigateurs l'envoient pour des raisons de compatibilité avec les anciens systèmes.
Les vrais navigateurs envoient également des en-têtes `sec-ch-ua` (indices client 'Sec-CH-UA') dans le HTTP moderne, qui contiennent des données structurées sur le navigateur, la version et la plateforme. Les systèmes anti-bot les comparent à la chaîne User-Agent et signalent les incohérences. La rotation du User-Agent doit donc être associée à des mises à jour cohérentes de `sec-ch-ua-*` et à des empreintes TLS correspondantes.