Dans ce guide de configuration de l’agent utilisateur Node.js, vous découvrirez :
- Pourquoi il est important de définir l’en-tête
User-Agent - À quoi ressemble l’agent utilisateur par défaut dans Node.js
- Comment définir un agent utilisateur à l’aide de l’API Fetch
- Comment implémenter la rotation des agents utilisateurs dans Node.js
C’est parti !
Pourquoi il est si important de définir un agent utilisateur
L’en-tête User-Agent est une chaîne qui identifie le logiciel client effectuant une requête HTTP. Il comprend généralement des informations sur le navigateur ou l’application, le système d’exploitation et l’architecture système à l’origine de la requête. Cet en-tête est généralement défini par les navigateurs Web, les clients HTTP ou tout logiciel effectuant des requêtes Web.
Par exemple, voici l’agent utilisateur actuellement défini par Chrome lors de la demande de pages :
Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/127.0.0.0 Safari/537.36
Vous trouverez ci-dessous une description détaillée des composants de cette chaîne d’agent utilisateur :
Mozilla/5.0: initialement utilisé pour indiquer la compatibilité avec les navigateurs Mozilla, ce préfixe est désormais ajouté à des fins de compatibilité.Windows NT 10.0 ; Win64 ; x64 :indique le système d’exploitation (Windows NT 10.0), la plate-forme (Win64) et l’architecture du système (x64).AppleWebKit/537.36: fait référence au moteur de navigation utilisé par Chrome.- (
KHTML, comme Gecko) : indique la compatibilité avec les moteurs de mise en page KHTML et Gecko. Chrome/127.0.0.0: spécifie le nom et la version du navigateur.Safari/537.36: indique la compatibilité avec Safari.
En substance, l’agent utilisateur peut révéler si la requête provient d’un navigateur fiable ou d’un autre type de logiciel.
Les robots de scraping web et les scripts d’automatisation utilisent souvent des chaînes d’agent utilisateur par défaut ou non liées à un navigateur. Celles-ci peuvent révéler leur nature automatisée aux systèmes anti-robots, qui protègent les données web en examinant minutieusement les requêtes entrantes. En analysant l’en-tête User-Agent, ces solutions peuvent déterminer si la requête provient d’un utilisateur authentique ou d’un robot.
Pour plus d’informations, consultez notre guide sur les agents utilisateurs pour le Scraping web.
Quel est l’agent utilisateur par défaut de Node.js ?
À partir de la version 18, Node.js inclut la méthode fetch() en tant qu’implémentation intégrée de l’API Fetch. Il s’agit de la méthode recommandée pour effectuer des requêtes HTTP dans Node.js, car elle ne nécessite aucune dépendance externe. Découvrez comment effectuer des requêtes HTTP dans Node.js avec l’API Fetch.
Comme la plupart des autres clients HTTP, fetch() définit automatiquement un en-tête User-Agent par défaut lors d’une requête. C’est par exemple le cas dans la bibliothèque Python requests.
En particulier, l’agent utilisateur Node.js par défaut défini par fetch() est :
node
Vous pouvez le vérifier en effectuant une requête GET vers le point de terminaison httpbin.io/user-agent. Ce point de terminaison renvoie l’en-tête User-Agent de la requête entrante, ce qui vous aide à découvrir l’agent utilisateur défini par un client HTTP.
Créez un script Node.js, définissez une fonction async et utilisez fetch() pour effectuer la requête HTTP souhaitée :
async function getFetchDefaultUserAgent() {
// envoyer une requête HTTP au point de terminaison HTTPBin
// pour obtenir l'agent utilisateur
const response = await fetch("https://httpbin.io/user-agent");
// lire l'agent utilisateur par défaut dans la réponse
// et l'imprimer
const data = await response.json();
console.log(data);
}
getFetchDefaultUserAgent();
Exécutez le code JavaScript ci-dessus et vous obtiendrez la chaîne suivante :
{ 'user-agent': 'node' }
Comme vous pouvez le constater, l’agent utilisateur défini par fetch() dans Node.js est simplement node. Cette chaîne est très différente des agents utilisateurs utilisés par les navigateurs, qui peuvent déclencher des systèmes anti-bot.
Les solutions anti-bot surveillent les requêtes entrantes à la recherche de modèles suspects, tels que des chaînes d’agent utilisateur inhabituelles. Une fois détectées, elles marquent la requête comme provenant d’un bot et la bloquent. C’est pourquoi il est essentiel de modifier la valeur par défaut de l’agent utilisateur Node.js pour éviter d’être signalé !
Comment modifier l’agent utilisateur Node.js à l’aide de l’API Fetch
La spécification de l’API Fetch ne fournit pas de méthode spécifique pour modifier l’agent utilisateur. Dans le même temps, User-Agent n’est rien d’autre qu’un en-tête HTTP. Cela signifie que vous pouvez personnaliser sa valeur à l’aide des options d’en-têtefetch().
Découvrez comment définir l’en-tête User-Agent dans Node.js à l’aide de fetch()!
Définir un agent utilisateur localement
fetch() prend en charge la personnalisation des en-têtes via l’option headers. Utilisez-la pour définir l’en-tête User-Agent lorsque vous effectuez une requête HTTP spécifique, comme suit :
const response = await fetch("https://httpbin.io/user-agent", {
headers: {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
},
});
Assemblez le tout et vous obtiendrez :
async function getFetchUserAgent() {
// envoyer une requête HTTP à HTTPBin
// avec un agent utilisateur personnalisé
const response = await fetch("https://httpbin.io/user-agent", {
headers: {
« User-Agent » :
« Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/127.0.0.0 Safari/537.36 »,
},
});
// lire l'agent utilisateur par défaut à partir de la réponse
// et l'imprimer
const data = await response.json();
console.log(data);
}
getFetchUserAgent();
Lancez le script ci-dessus, et cette fois, le résultat sera :
{
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}
Fantastique ! L’agent utilisateur renvoyé par l’API correspond à l’agent utilisateur configuré dans le code. Vous savez désormais comment modifier l’agent utilisateur Node.js.
Définir un agent utilisateur globalement
Définir l'agent utilisateur pour chaque requête est simple, mais cela peut entraîner un code répétitif. Que faire si vous souhaitez modifier l’agent utilisateur Node.js par défaut de manière globale ? Malheureusement, à l’heure où nous écrivons ces lignes, l’API fetch() ne permet pas de remplacer ses paramètres par défaut de manière globale.
Vous pouvez toutefois créer une fonction wrapper pour personnaliser le comportement de fetch() avec les configurations de votre choix :
function customFetch(url, options = {}) {
// en-têtes personnalisés
const customHeaders = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
...options.headers, // fusionner avec tout autre en-tête passé dans les options
};
const mergedOptions = {
...options,
headers: customHeaders,
};
return fetch(url, mergedOptions);
}
Vous pouvez désormais effectuer une requête HTTP avec un agent utilisateur personnalisé en appelant customFetch() au lieu de fetch():
const response = await customFetch("https://httpbin.io/user-agent");
Le script Node.js complet sera :
function customFetch(url, options = {}) {
// ajouter un en-tête d'agent utilisateur personnalisé
const customHeaders = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
...options.headers, // fusionner avec tous les autres en-têtes passés dans les options
};
const mergedOptions = {
...options,
headers: customHeaders,
};
return fetch(url, mergedOptions);
}
async function getFetchUserAgent() {
// envoyer une requête HTTP à HTTPBin
// via le wrapper fetch personnalisé
const response = await customFetch("https://httpbin.io/user-agent");
// lire l'agent utilisateur par défaut dans la réponse
// et l'afficher
const data = await response.json();
console.log(data);
}
getFetchUserAgent();
Lancez le script Node.js ci-dessus, et il affichera :
{
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}
Parfait ! Vous venez d’apprendre à définir un agent utilisateur global dans Node.js à l’aide de fetch().
Implémenter la rotation des agents utilisateurs dans Node.js
Remplacer l’en-tête User-Agent par défaut d’un client HTTP par celui d’un navigateur réel peut ne pas suffire pour échapper à la détection anti-bot. Si vous envoyez trop de requêtes à partir de la même adresse IP en utilisant le même agent utilisateur, les systèmes anti-scraping peuvent toujours identifier votre activité comme étant automatisée. Le problème est que vos requêtes continueront à suggérer un comportement non humain.
Pour réduire le risque de détection des bots dans Node.js, vous devez introduire de la variabilité dans vos requêtes HTTP. Une technique efficace consiste à utiliser la rotation des agents utilisateurs, qui consiste à modifier l’en-tête User-Agent à chaque requête. Cette approche donne l’impression que vos requêtes automatisées proviennent de différents navigateurs, ce qui les rend moins susceptibles d’être signalées par les systèmes anti-bot.
Dans la section suivante, vous apprendrez comment réaliser la rotation des agents utilisateurs dans Node.js !
Étape n° 1 : récupérer une liste d’agents utilisateurs
Rendez-vous sur un site tel que WhatIsMyBrowser.com et remplissez une liste de valeurs d’agents utilisateurs valides :
const userAgents = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
« Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64 ; rv:128.0) Gecko/20100101 Firefox/128.0 »,
« Mozilla/5.0 (Macintosh ; Intel Mac OS X 14_6) AppleWebKit/605.1.15 (KHTML, comme Gecko) Version/17.5 Safari/605.1.15 »,
« Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/126.0.2592.113 »,
// autres agents utilisateurs...
] ;
Astuce: plus ce tableau contient de chaînes d’agents utilisateurs réels, mieux c’est pour éviter la détection anti-bot.
Étape n° 2 : choisir un agent utilisateur au hasard
Créez une fonction qui sélectionne et renvoie de manière aléatoire une chaîne d’agent utilisateur à partir de la liste :
function getRandomUserAgent() {
const userAgents = [
// agents utilisateurs omis pour plus de concision...
];
// renvoie un agent utilisateur au hasard
// extrait de la liste
return userAgents[Math.floor(Math.random() * userAgents.length)];
}
Décomposons ce qui se passe dans cette fonction :
Math.random()génère un nombre aléatoire compris entre 0 et 1- Ce nombre est ensuite multiplié par la longueur du tableau
userAgents. Math.floor()arrondit le nombre obtenu à l’entier inférieur le plus proche.- Le nombre résultant des opérations précédentes correspond à un index généré aléatoirement qui va de 0 à
userAgents.length - 1. - L’index est ensuite utilisé pour renvoyer un agent utilisateur aléatoire à partir du tableau des agents utilisateurs.
Chaque fois que vous appelez la fonction getRandomUserAgent(), vous obtiendrez probablement un agent utilisateur différent.
Étape n° 3 : effectuer la requête HTTP avec un agent utilisateur aléatoire
Pour implémenter la rotation des agents utilisateurs dans Node.js à l’aide de fetch(), définissez l’en-tête User-Agent avec la valeur de la fonction getRandomUserAgent():
const response = await fetch("https://httpbin.io/user-agent", {
headers: {
"User-Agent": getRandomUserAgent(),
},
});
La requête HTTP effectuée via l’API Fetch aura désormais un agent utilisateur aléatoire.
Étape n° 4 : rassembler tous les éléments
Ajoutez les extraits des étapes précédentes à un script Node.js, puis intégrez la logique permettant d’effectuer une requête fetch() dans une fonction asynchrone.
Voici à quoi devrait ressembler votre script Node.js final de rotation des agents utilisateurs :
function getRandomUserAgent() {
const userAgents = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
« Mozilla/5.0 (Macintosh ; Intel Mac OS X 14_6) AppleWebKit/605.1.15 (KHTML, comme Gecko) Version/17.5 Safari/605.1.15 »,
« Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/126.0.2592.113 »,
// autres agents utilisateurs...
];
// renvoyer un agent utilisateur aléatoire
// extrait de la liste
return userAgents[Math.floor(Math.random() * userAgents.length)];
}
async function getFetchUserAgent() {
// effectuer une requête HTTP avec un agent utilisateur aléatoire
const response = await fetch("https://httpbin.io/user-agent", {
headers: {
"User-Agent": getRandomUserAgent(),
},
});
// lire l'agent utilisateur par défaut à partir de la réponse
// et l'imprimer
const data = await response.json();
console.log(data);
}
getFetchUserAgent();
Exécutez le script 3 ou 4 fois. Statistiquement, vous devriez voir différentes réponses d’agent utilisateur comme ci-dessous :

Cela démontre que la rotation des agents utilisateurs fonctionne efficacement.
Et voilà ! Vous savez désormais configurer des agents utilisateurs dans Node.js à l’aide de l’API Fetch.
Conclusion
Dans ce tutoriel, vous avez vu pourquoi vous devriez définir l’en-tête User-Agent et à quoi ressemble l’agent utilisateur Node.js par défaut dans fetch(). Vous avez également découvert comment remplacer cette valeur et mettre en œuvre la rotation des agents utilisateurs dans Node.js afin de contourner les systèmes anti-scraping de base. Cependant, les systèmes plus avancés peuvent toujours détecter et bloquer vos requêtes automatisées. Pour éviter les interdictions d’IP, vous pouvez configurer un Proxy dans Node.js, mais même cela peut ne pas toujours suffire !
Pour une solution plus robuste, envisagez l’API Web Scraper, un service de Scraping web de nouvelle génération qui simplifie les requêtes web automatisées dans Node.js ou toute autre technologie. Il contourne efficacement les mesures anti-scraping grâce à des fonctionnalités telles que la rotation des adresses IP et des agents utilisateurs, rendant le Scraping web plus facile que jamais.
Inscrivez-vous dès maintenant et trouvez le produit le mieux adapté à vos projets. Commencez votre essai gratuit dès aujourd’hui !