À la fin de cet article, vous saurez :
- Ce qu’est un agent utilisateur et pourquoi vous devez le définir dans vos requêtes HTTP
- Quel est l’agent utilisateur par défaut défini par Wget
- Comment modifier la chaîne de l’agent utilisateur Wget
- Comment mettre en œuvre la rotation des agents utilisateurs avec Wget
C’est parti !
Agent utilisateur : définition et pourquoi le définir
Un agent utilisateur est une chaîne définie dans l’en-tête HTTP User-Agent par les navigateurs, les applications effectuant des requêtes Web et les clients HTTP afin d’identifier le logiciel client à l’origine de la requête. Cette chaîne contient généralement des informations telles que le type de navigateur ou d’application, le système d’exploitation et d’autres détails pertinents.
Par exemple, voici l’agent utilisateur défini par Chrome au moment de la rédaction de cet article lors de la visite de pages web :
Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/125.0.0.0 Safari/537.36
Les informations contenues dans cette chaîne sont les suivantes :
- Mozilla/5.0 : historiquement utilisé pour indiquer la compatibilité avec les navigateurs Mozilla, mais désormais préfixe courant dans les agents utilisateurs à des fins de compatibilité.
- Windows NT 10.0 ; Win64 ; x64 : système d’exploitation (Windows NT 10.0), plate-forme (Win64) et architecture (x64).
- AppleWebKit/537.36 : moteur de navigation utilisé par cette version de Chrome.
- KHTML, comme Gecko : compatibilité avec le moteur KHTML et le moteur de mise en page Gecko utilisés par Mozilla.
- Chrome/125.0.0.0 : nom du navigateur et sa version.
- Safari/537.36 : compatibilité avec Safari.
En d’autres termes, l’agent utilisateur est essentiel pour déterminer si une requête provient d’un navigateur connu ou d’un autre logiciel.
Les robots de scraping utilisent souvent des chaînes d’agent utilisateur incohérentes ou par défaut, révélant ainsi leur nature automatisée. Par conséquent, l’en-tête User-Agent aide les solutions anti-bot, utilisées par les sites pour protéger leurs pages et leurs données, à déterminer si l’utilisateur actuel est authentique ou s’il s’agit d’un robot.
Pour plus d’informations, consultez notre guide sur les agents utilisateurs pour le Scraping web.
Quel est l’agent utilisateur Wget par défaut ?
Lorsqu’il effectue une requête HTTP, Wget définit l’en-tête User-Agent sur la valeur suivante :
Wget/X.Y.Z
La chaîne X.Y.Z correspond à la version de Wget installée sur votre machine.
Pour vérifier que la chaîne ci-dessus correspond bien à l’agent utilisateur Wget, effectuez une requête GET vers le point de terminaison httpbin.io /user-agent. Cela renvoie la chaîne dans l’en-tête User-Agent de la requête entrante, ce qui constitue un bon moyen de vérifier l’agent utilisateur utilisé par le client HTTP.
Effectuez une requête GET vers /user-agent avec Wget en utilisant cette instruction :
wget -O « response.json » « https://httpbin.io/user-agent »
Remarque: sous Windows, remplacez wget par wget.exe. Cela est nécessaire car wget est un alias de Invoke-WebRequest dans PowerShell, tandis que wget.exe pointe vers l’exécutable Wget Windows.
La commande précédente téléchargera la réponse renvoyée par le point de terminaison et la stockera dans un fichier local response.json contenant quelque chose comme ceci :
{
"user-agent": "Wget/1.21.4"
}
Dans ce cas, l’agent utilisateur défini par Wget est Wget/1.21.4. Comme vous pouvez l’imaginer, cela identifie clairement la requête comme provenant de Wget. Les solutions anti-bot pourraient facilement signaler une telle requête comme ne provenant pas d’un utilisateur réel et la bloquer immédiatement. C’est pourquoi il est si important de connaître certaines approches de modification de l’agent utilisateur Wget !
Comment définir un agent utilisateur Wget
Il existe deux façons de définir un agent utilisateur dans Wget. Explorons-les toutes les deux !
Définir directement un agent utilisateur personnalisé
Wget offre une option permettant de modifier les agents utilisateurs. Plus précisément, l’option -U ou –user-agent vous permet de remplacer la chaîne par défaut utilisée dans l’en-tête User-Agent par Wget. Utilisez la syntaxe suivante pour définir une chaîne d’agent utilisateur dans Wget :
wget [autres_options] -U|--user-agent "<chaîne_agent_utilisateur>" "<url>"
Maintenant, regardez l’exemple ci-dessous :
wget -O "response.json" -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
Ouvrez response.json, et vous verrez :
{
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
Génial, la stratégie d’agent utilisateur définie par Wget a fonctionné à merveille !
N’oubliez pas que la commande Wget précédente équivaut à :
wget.exe -O « response.json » --user-agent « Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 » « https://httpbin.io/user-agent »
Pour supprimer l’en-tête User-Agent de la requête, passez une chaîne vide à -U. Vous pouvez le vérifier en ciblant le point de terminaison /headers de httpbin.io, qui renvoie les en-têtes HTTP de la requête entrante :
wget -O « response.json » -U « » « https://httpbin.io/headers »
Le fichier response.json contiendra :
{
"headers": {
"Accept": [
"*/*"
],
"Accept-Encoding": [
"identity"
],
"Connection": [
"Keep-Alive"
],
"Host": [
"httpbin.io"
]
}
}
Comme prévu, aucun en-tête User-Agent.
Si vous souhaitez plutôt désactiver l’en-tête User-Agent, passez un seul espace à -U :
wget -O « response.json » -U « » « https://httpbin.io/headers »
Le contenu de response.json sera :
{
"headers": {
"Accept": [
"*/*"
],
"Accept-Encoding": [
"identity"
],
"Connection": [
"Keep-Alive"
],
"Host": [
"httpbin.io"
],
"User-Agent": [
""
]
}
}
L’en-tête User-Agent est présent, mais il contient une chaîne vide comme souhaité.
Remarque: la suppression ou la désactivation de l’en-tête User-Agent est une mauvaise pratique qui peut déclencher des technologies anti-bot.
Définir un en-tête HTTP User-Agent personnalisé
Comme User-Agent est un en-tête HTTP, vous pouvez le définir comme n’importe quel autre en-tête dans Wget à l’aide de l’option –header, grâce à cette syntaxe :
wget [autres_options] --header "User-Agent: <chaîne_user-agent>" "<url>"
Découvrez l’option –header en action dans l’exemple ci-dessous :
wget.exe -O response.json --header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
Le résultat dans response.json sera :
{
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
Parfait, la valeur de l’agent utilisateur dans la réponse correspond à la chaîne dans l’option –header.
Pour désactiver l’en-tête de l’agent utilisateur Wget, utilisez la valeur d’en-tête « User-Agent: ». Si vous devez supprimer complètement l’en-tête, vous devez utiliser l’option -U comme expliqué précédemment.
Mettre en œuvre la rotation des agents utilisateurs avec Wget
L’utilisation d’une valeur User-Agent statique, même s’il s’agit d’un agent utilisateur provenant d’un navigateur réel, peut ne pas être une approche efficace lors de la création de requêtes automatisées avec Wget. Le problème est que les technologies anti-bot surveillent toutes les requêtes entrantes et, lorsqu’elles détectent trop de requêtes avec les mêmes en-têtes provenant d’une adresse IP particulière, elles peuvent la bloquer.
La randomisation des requêtes est la clé pour éviter la détection et le blocage. Comment rendre les requêtes moins similaires les unes aux autres ? En utilisant la rotation des agents utilisateurs! Cette méthode permet de simuler des requêtes provenant de différents navigateurs, réduisant ainsi le risque de déclencher des blocages ou des interdictions temporaires.
Vous pouvez réaliser la rotation des agents utilisateurs Wget en suivant les trois étapes suivantes :
- Récupérez certains agents utilisateurs: collectez une liste de chaînes d’agents utilisateurs réels à partir des navigateurs.
- Mettez en œuvre la logique de rotation: choisissez au hasard un agent utilisateur aléatoire dans la liste.
- Randomisez la requête: définissez la chaîne d’agent utilisateur sélectionnée dans la requête Wget.
La mise en œuvre de cette procédure nécessite quelques lignes de code, que vous pouvez écrire avec Unix Bash ou Windows PowerShell. Vous pouvez également y parvenir en intégrant Wget à Python.
Découvrez maintenant comment gérer la rotation des agents utilisateurs dans Wget sur les systèmes Windows et UNIX !
Bash
Rassemblez une liste d’agents utilisateurs valides à partir d’un site tel que User Agent String.com et stockez-la dans un tableau :
user_agents=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
« Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64 ; rv:126.0) Gecko/20100101 Firefox/126.0 »
)
Ensuite, créez une fonction qui extrait aléatoirement une chaîne d’agent utilisateur de la liste à l’aide de RANDOM:
get_random_user_agent() {
# nombre d'agents utilisateurs dans la liste
local count=${#user_agents[@]}
# générer un nombre RANDOM compris entre 0 et count
local index=$((RANDOM % count))
# extraire une chaîne d'agent utilisateur de la liste
# et la renvoyer
echo "${user_agents[$index]}"
}
Appelez la fonction pour obtenir un agent utilisateur aléatoire et utilisez-le dans la commande Wget :
# obtenir l'agent utilisateur aléatoire
user_agent=$(get_random_user_agent)
# effectuer une requête Wget vers une URL donnée
# en utilisant l'agent utilisateur aléatoire
wget -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"
Remarque : modifiez l'URL cible en fonction de vos objectifs.
Assemblez le tout et vous obtiendrez le script bash suivant :
#!/bin/bash
# liste des chaînes d'agent utilisateur
user_agents=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
« Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64 ; rv:126.0) Gecko/20100101 Firefox/126.0 »)
get_random_user_agent() {
# nombre d'agents utilisateurs dans la liste
local count=${#user_agents[@]}
# générer un nombre ALÉATOIRE compris entre 0 et count
local index=$((RANDOM % count))
# extraire une chaîne d'agent utilisateur de la liste
# et la renvoyer
echo "${user_agents[$index]}"
}
# obtenir l'agent utilisateur aléatoire
user_agent=$(get_random_user_agent)
# effectuer une requête Wget vers une URL donnée
# en utilisant l'agent utilisateur aléatoire
wget -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"
Ajoutez le code ci-dessus à un script .sh et lancez-le. Cela produira un fichier response.json dans le même dossier que le script. Ouvrez-le et consultez l’agent utilisateur renvoyé par le point de terminaison /user-agent. Exécutez le script à plusieurs reprises et vous verrez différents agents utilisateurs.
Bravo ! La rotation des agents utilisateurs Wget est implémentée.
PowerShell
Obtenez une liste d’agents utilisateurs réels à partir d’un site tel que WhatIsMyBrowser.com. Ensuite, stockez ces chaînes dans une variable de tableau PowerShell:
$user_agents = @(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
« Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64 ; rv:126.0) Gecko/20100101 Firefox/126.0 »
)
Implémentez une fonction qui sélectionne aléatoirement une chaîne d’agent utilisateur dans la liste à l’aide de Get-Random et la renvoie :
function Get-RandomUserAgent {
# nombre d'agents utilisateurs dans la liste
$count = $user_agents.Count
# générer un nombre aléatoire compris entre 0 et $count
$index = Get-Random -Maximum $count
# extraire une chaîne d'agent utilisateur et la renvoyer
return $user_agents[$index]
}
Appelez la fonction pour récupérer une chaîne d’agent utilisateur aléatoire et utilisez-la dans la requête Wget :
# obtenir l'agent utilisateur aléatoire
$user_agent = Get-RandomUserAgent
# envoyer une requête HTTP à une URL donnée
# en utilisant l'agent utilisateur aléatoire
wget.exe -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"
Assemblez le tout pour obtenir le code suivant :
# liste des agents utilisateurs
$user_agents = @(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
« Mozilla/5.0 (Macintosh ; Intel Mac OS X 14.5 ; rv:126.0) Gecko/20100101 Firefox/126.0 »
# ...
« Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64 ; rv:126.0) Gecko/20100101 Firefox/126.0 »)
function Get-RandomUserAgent {
# nombre d'agents utilisateurs dans la liste
$count = $user_agents.Count
# générer un nombre aléatoire compris entre 0 et $count
$index = Get-Random -Maximum $count
# extraire une chaîne d'agent utilisateur et la renvoyer
return $user_agents[$index]
}
# obtenir un agent utilisateur aléatoire
$user_agent = Get-RandomUserAgent
# envoyer une requête HTTP à une URL donnée
# en utilisant l'agent utilisateur aléatoire
wget.exe -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"
Enregistrez la logique ci-dessus dans un script .ps1. Exécutez-le plusieurs fois et vous obtiendrez différentes chaînes d’agent utilisateur dans le fichier de sortie response.json.
Et voilà ! Vous maîtrisez désormais les procédures de modification de l’agent utilisateur Wget.
Conclusion
Dans ce guide, vous avez découvert pourquoi vous devez toujours définir l’en-tête User-Agent dans un client HTTP et comment le faire dans Wget. Cette approche peut tromper les systèmes anti-bot simples en leur faisant croire que vos requêtes proviennent de navigateurs légitimes. Cependant, les solutions anti-bot avancées peuvent toujours détecter et bloquer vos requêtes. Pour contourner les mesures anti-scraping telles que la limitation du débit, vous pouvez utiliser un Proxy avec Wget. Malheureusement, cela peut ne pas suffire !
Évitez tout ce stress et essayez Scraper API. En tant qu’API de scraping complète, elle comprend tout ce dont vous avez besoin pour effectuer des requêtes web automatisées avec Wget ou tout autre client HTTP. Cette solution tout-en-un peut contourner n’importe quelle technologie anti-bot et propose également des fonctionnalités de rotation d’IP et d’agent utilisateur. Il n’a jamais été aussi facile d’effectuer des requêtes automatisées !
Trouvez le produit parfait pour vos besoins, inscrivez-vous dès maintenant.