Guide de l’agent utilisateur cURL : configuration et modification

Apprenez à définir et à modifier l’en-tête User-Agent dans cURL afin d’améliorer vos efforts de Scraping web.
11 min de lecture
cURL User Agent Guide blog image

Dans ce guide, vous apprendrez :

  • Ce qu’est l’en-tête User-Agent et pourquoi il est si important
  • Quel est l’en-tête user-agent cURL par défaut
  • Deux approches pour définir les chaînes d’agent utilisateur cURL
  • Comment implémenter la logique de rotation des agents utilisateurs dans cURL

C’est parti !

Qu’est-ce qu’un agent utilisateur et pourquoi est-il important ?

Un agent utilisateur est une chaîne que les navigateurs, les applications qui effectuent des requêtes Web et les clients HTTP définissent dans l’en-tête HTTP User-Agent afin d’identifier le logiciel client à l’origine de la requête. Cette chaîne comprend généralement des informations telles que le type de navigateur/d’application, le système d’exploitation et d’autres détails.

Voici par exemple une chaîne d’agent utilisateur réelle provenant d’une requête Chrome :

Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/124.0.0.0 Safari/537.36

Les informations contenues dans cet en-tête sont essentielles pour déterminer si les requêtes proviennent d’un navigateur connu ou d’un autre logiciel. Les robots de scraping ont tendance à utiliser des chaînes d’agent utilisateur incohérentes ou par défaut, ce qui révèle leur nature automatisée. Ainsi, l’en-tête de l’agent utilisateur aide les solutions anti-bot à comprendre si l’utilisateur actuel est réel ou s’il s’agit d’un bot. 

Pour plus d’informations, consultez notre guide sur les agents utilisateurs pour le Scraping web

Quel est l’agent utilisateur cURL par défaut ?

Comme la plupart des clients HTTP, cURL définit l’en-tête User-Agent lorsqu’il effectue une requête HTTP. Plus précisément, la chaîne d’agent utilisateur cURL est la suivante :

curl/X.Y.Z 

Où X.Y.Z correspond à la version de cURL installée sur votre machine.

Pour vérifier cela, effectuez une requête cURL vers le point de terminaison /user-agent du projet httpbin.io. Cette API renvoie la chaîne d’en-tête User-Agent définie par l’appelant.

Effectuez une requête GET vers /user-agent avec cURL en utilisant l’instruction suivante :

curl "https://httpbin.io/user-agent"

Remarque: sous Windows, remplacez curl par curl.exe. En effet, curl est un alias de Invoke-WebRequest dans PowerShell, tandis que curl.exe pointe vers l’exécutable cURL Windows. 

Le point de terminaison devrait renvoyer quelque chose comme ceci :

{

  "user-agent": "curl/8.4.0"

}

Comme vous pouvez le constater, l’agent utilisateur défini par cURL est curl/8.4.0. Ce n’est pas idéal, car cela identifie clairement la requête comme provenant de cURL. Les solutions anti-bot adoptées par les sites pour protéger leurs pages et leurs données pourraient facilement marquer cette requête comme ne provenant pas d’un utilisateur réel et la bloquer en conséquence. 

C’est pourquoi vous devez savoir comment définir les chaînes d’en-tête de l’agent utilisateur cURL.

Comment définir l’en-tête de l’agent utilisateur cURL

Il existe deux approches pour définir un agent utilisateur dans cURL. Explorons-les toutes les deux !

Définir directement un agent utilisateur personnalisé

La configuration des agents utilisateurs est si courante que cURL propose une option spécialement dédiée à cela. En particulier, l’option -A ou –user-agent vous permet de spécifier la chaîne à définir dans l’en-tête User-Agent de la requête HTTP effectuée par cURL.

Voici la syntaxe pour définir un en-tête d’agent utilisateur cURL à l’aide de cette option :

curl -A|--user-agent "<user-agent_string>" "<url>"

Prenons l’exemple suivant :

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"

Le résultat sera :

{

  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"

}

Parfait ! L’agent utilisateur détecté par le point de terminaison httpbin.io /user-agent est identique à celui défini dans la requête.

Gardez à l’esprit que la requête ci-dessus équivaut à :

curl --user-agent « Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/124.0.0.0 Safari/537.36 » « https://httpbin.io/user-agent »

Bien que cela ne soit pas recommandé, pour désactiver complètement l’en-tête User-Agent, passez une chaîne vide à -A. Vérifiez cela en ciblant le point de terminaison /headers de httpbin.io, qui renvoie les en-têtes de la requête entrante :

curl -A "" "https://httpbin.io/headers"

Le résultat sera :

{

  "headers": {

    "Accept": [

      "*/*"

    ],

    "Host": [

      "httpbin.io"

    ]

  }

}

Comme prévu, aucun en-tête User-Agent n’apparaît.

Si vous souhaitez conserver l’en-tête User-Agent mais lui attribuer une valeur vide, passez une chaîne d’espaces unique à -A :

curl -A " " "https://httpbin.io/headers"

Cette fois, le point de terminaison renverra :

{

  « headers » : {

    « Accept » : [

      « */* »

    ],

    « Host » : [

      « httpbin.io »

    ],

    « User-Agent » : [

      « »

    ]

  }

}

Notez la valeur vide de la chaîne User-Agent.

Définir un en-tête User Agent personnalisé

Après tout, User-Agent n’est rien d’autre qu’un en-tête HTTP. Cela signifie que vous pouvez le définir comme n’importe quel autre en-tête HTTP dans cURL en utilisant l’option -H ou –header:

curl -H|--header "User-Agent: <user-agent_string>" "<url>"

Pour un tutoriel complet, consultez notre guide sur la manière d’envoyer des en-têtes HTTP avec cURL.

Découvrez l’option -H en action dans l’exemple suivant :

curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"

Notez que les en-têtes HTTP sont conçus pour être insensibles à la casse, donc User-Agent est équivalent à user-agent.

Le résultat sera :

{

  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"

}

Parfait ! La valeur de l’agent utilisateur a été définie comme souhaité.

La commande cURL ci-dessus équivaut à :

curl --header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"

Pour les cas d’utilisation particuliers, envisagez les deux chaînes d’en-tête d’agent utilisateur cURL suivantes :

  • « User-Agent: » pour supprimer l’en-tête User-Agent de la requête.
  • « User-Agent: » pour définir l’en-tête User-Agent sur une chaîne vide.

Implémenter la rotation des agents utilisateurs dans cURL

Lorsque vous effectuez des requêtes automatiques à grande échelle à l’aide de cURL, il peut ne pas suffire de définir une valeur fixe pour User-Agent. Le problème est que les technologies anti-bot surveillent toutes les requêtes entrantes. Si elles en détectent trop avec les mêmes en-têtes et provenant de la même adresse IP, elles sont susceptibles de prendre des mesures.

La clé pour éviter la détection et le blocage par les sites lors de la création de requêtes automatisées est de les randomiser. À cet égard, la rotation des agents utilisateurs permet de simuler des requêtes provenant de différents navigateurs. Cela réduit le risque de déclencher des interdictions ou des blocages temporaires.

Réalisez la rotation des agents utilisateurs cURL en suivant les trois étapes suivantes :

  1. Collecter les agents utilisateurs: rassemblez une liste de chaînes d’agents utilisateurs réels provenant de différents navigateurs, de différentes versions et sur différents appareils.
  2. Mettre en œuvre la logique de rotation: sélectionner un agent utilisateur aléatoire dans la liste.
  3. Randomiser les requêtes: définissez la chaîne d’agent utilisateur sélectionnée dans la requête cURL.

La mise en œuvre de cette procédure nécessite quelques lignes de code, elle diffère donc entre les systèmes basés sur Unix et Windows. Découvrez comment mettre en œuvre la rotation des agents utilisateurs dans cURL dans les deux environnements !

Bash

Collectez une liste d’agents utilisateurs valides à partir d’un site tel que User Agent String.com et stockez-la dans une variable de type 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, implémentez une fonction qui l’extrait aléatoirement 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))

    # renvoyer la chaîne d'agent utilisateur extraite aléatoirement

    echo "${user_agents[$index]}"

}

Appelez la fonction, obtenez un agent utilisateur rotatif et définissez-le dans cURL :

# obtenir l'agent utilisateur aléatoire

user_agent=$(get_random_user_agent)

# effectuer une requête cURL vers l'URL donnée

# en utilisant l'agent utilisateur aléatoire

curl -A "$user_agent" "https://httpbin.io/user-agent"

Remarque: modifiez l’URL cible en fonction de vos objectifs.

Assemblez le tout et vous obtiendrez le fichier 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))

    # renvoyer la chaîne d'agent utilisateur extraite aléatoirement

    echo "${user_agents[$index]}"

}

# obtenir l'agent utilisateur aléatoire

user_agent=$(get_random_user_agent)

# effectuer une requête cURL vers l'URL donnée

# en utilisant l'agent utilisateur aléatoire

curl -A "$user_agent" "https://httpbin.io/user-agent"

Lancez le script ci-dessus et vous verrez apparaître un agent utilisateur différent à chaque fois. Mission accomplie !

PowerShell

Récupérez une liste d’agents utilisateurs réels à partir d’un site tel que WhatIsMyBrowser.com. Ensuite, stockez ces données dans une variable de type 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 sélectionne aléatoirement une chaîne d’agent utilisateur dans la liste 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

    # renvoyer l'agent utilisateur extrait aléatoirement

    return $user_agents[$index]

}

Enfin, appelez la fonction, obtenez l’agent utilisateur aléatoire et utilisez-le dans cURL :

# obtenir l'agent utilisateur aléatoire

$user_agent = Get-RandomUserAgent

# envoyer une requête HTTP à l'URL donnée 

# en utilisant l'agent utilisateur aléatoire

curl.exe -A "$user_agent" "https://httpbin.io/user-agent"

Assemblez le tout et vous obtiendrez 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

    # renvoyer l'agent utilisateur extrait aléatoirement

    return $user_agents[$index]

}

# obtenir un agent utilisateur aléatoire

$user_agent = Get-RandomUserAgent

# envoyer une requête HTTP à l'URL donnée 

# en utilisant l'agent utilisateur aléatoire

curl.exe -A "$user_agent" "https://httpbin.io/user-agent"

Enregistrez-le dans un script .ps1 et exécutez-le plusieurs fois. À chaque fois, vous obtiendrez une chaîne d’agent utilisateur différente.

Et voilà ! Vous êtes désormais un expert dans la configuration des chaînes d’en-tête d’agent utilisateur cURL.

Conclusion

Dans ce guide, vous avez découvert pourquoi il est si important de définir l’en-tête User-Agent dans un client HTTP et comment le faire dans cURL. De cette façon, vous pouvez tromper certains systèmes anti-bot en leur faisant croire que vos requêtes proviennent d’un navigateur relationnel. Dans le même temps, les solutions anti-bot avancées pourront toujours bloquer vos requêtes. Pour contourner des mesures telles que la limitation du débit, vous pouvez intégrer un Proxy dans cURL. Cependant, cela peut ne pas être suffisant !

Évitez tout ce stress et essayez Scraper API. En tant qu’API de scraping tout-en-un, complète et de nouvelle génération, elle fournit tout ce dont vous avez besoin pour effectuer des requêtes web automatisées à l’aide de cURL ou de tout autre client HTTP. Cette solution complète comprend la rotation des adresses IP et des agents utilisateurs, et peut contourner n’importe quelle technologie anti-bot. Il n’a jamais été aussi facile d’effectuer des requêtes HTTP automatisées !

Inscrivez-vous dès maintenant pour bénéficier d’un essai gratuit de l’Infrastructure de scraping web de Bright Data ou discutez avec l’un de nos experts en données de nos solutions de scraping.