Le protocole HTTP (Hypertext Transfer Protocol) est un protocole sans état qui suit le modèle client-serveur, dans lequel un client effectue une requête puis attend une réponse du serveur. La requête comprend des détails tels que la méthode HTTP, l’emplacement du serveur, le chemin d’accès, la chaîne de requête et les en-têtes.
Les en-têtes HTTP sont des champs ou des listes de chaînes sous forme de paires clé-valeur qui facilitent la transmission de métadonnées et d’instructions. Ils jouent un rôle essentiel dans la définition de paramètres tels que le type de contenu, le comportement de mise en cache et l’authentification, garantissant ainsi des interactions efficaces et sécurisées entre les clients et les serveurs. Dans le Scraping web, les en-têtes HTTP vous permettent de personnaliser les requêtes, ce qui permet aux Scrapers d’imiter les agents utilisateurs, de contrôler la négociation de contenu et de gérer l’authentification selon les politiques et protocoles des sites web.
Parmi les cas d’utilisation courants des en-têtes HTTP dans le Scraping web, on peut citer la modification de l’agent utilisateur (UA) ou du type de réponse, l’exécution de requêtes conditionnelles et l’authentification auprès des interfaces de programmation d’applications (API).
Dans cet article, vous apprendrez comment envoyer des en-têtes HTTP aveccurl.
Envoi d’en-têtes HTTP avec cURL
Avant de commencer ce tutoriel, vérifiez que curl est installé sur votre système d’exploitation en exécutant la commande suivante dans votre terminal :
curl --version
S’il est installé, vous verrez un numéro de version dans la sortie, comme ceci :
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Date de sortie : [non publié]
Protocoles : dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Fonctionnalités : AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL
Si vous obtenez un message d’erreur, tel que «curl n'est pas reconnu comme une commande interne ou externe, un programme exécutable ou un fichier batch» ou «commande introuvable », vous devezinstaller curl.
Vous aurez également besoin d’un outil pour inspecter les en-têtes, tel quehttpbin.org, qui est un service simple de requêtes et de réponses HTTP.
Si vous avez déjà utilisé curl, vous savez que la syntaxe curl ressemble à ceci :
curl [options] [url]
Cela signifie que si vous souhaitez télécharger une page web à partir de mywebpage.com, vous devez exécuter la commande suivante :
curl www.mywebpage.com
En-têtes cURL
Pour afficher les en-têtes envoyés par curl à l’aide de httpbin.org, ouvrez votre ligne de commande et exécutez la commande suivante :
curl http://httpbin.org/headers
Votre résultat devrait inclure une liste des en-têtes :
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd2eb0-0617353714d52f3777c9c267"
}
Les en-têtes Accept, Host et User-Agent sont envoyés par défaut avec curl.
L’en-tête Accept indique au serveur les types de médias que le client peut accepter. Il communique au serveur les types de contenu que le client est prêt à accepter, ce qui permet la négociation de contenu entre le client et le serveur.
Un en-tête Accept indiquant que le client préfère JSON se présente comme suit :
Accept: application/json
Le champ User-Agent contient les détails de votre client, qui, dans ce cas, est l’application curl fonctionnant sous la version 7.55.1 (ce numéro de version correspondra à votre version).
L’en-tête Host identifie de manière unique le domaine web (c’est-à-dire l’hôte) et le port vers lequel la requête HTTP est envoyée. Si aucun port n’est inclus dans la requête, les valeurs par défaut sont utilisées (c’est-à-dire le port 80 pour HTTP et le port 443 pour HTTPS).
X-Amzn-Trace-Id est le seul en-tête de la sortie qui n’est pas un en-tête par défaut. Cet en-tête indique que votre requête a été envoyée à un service Amazon Web Services (AWS), tel qu’un équilibreur de charge AWS, et peut être utilisé pour tracer les requêtes HTTP.
Pour vérifier que ces en-têtes ont été envoyés par curl par défaut, vous pouvez utiliser le mode verbose. Le drapeau correspondant est -v ou --verbose et affiche des informations détaillées sur la requête et la réponse, y compris les en-têtes.
Exécutez la commande suivante pour afficher les en-têtes par défaut envoyés par curl :
curl -v http://httpbin.org/headers
Votre sortie devrait ressembler à ceci :
* Trying 50.16.63.240...
* TCP_NODELAY set
* Connected to httpbin.org (50.16.63.240) port 80 (#0)
> GET /headers HTTP/1.1
> Host: httpbin.org
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 22 Mar 2024 07:18:00 GMT
< Content-Type: application/json
< Content-Length: 173
< Connection: keep-alive
< Server: gunicorn/19.9.0
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
<
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd30a8-624365ad52781957578cd5b1"
}
}
* Connexion n° 0 à l'hôte httpbin.org laissée intacte
Les lignes avec un signe supérieur à (>) indiquent ce que votre client (curl) a envoyé au point de terminaison. Cette sortie confirme que les en-têtes suivants ont été envoyés :
GET(méthode HTTP) vers le point de terminaison/en-têtesHôteavec la valeurhttpbin.orgUser-Agentavec la valeurcurl/7.55.1Acceptavec la valeur*/*
Dans le résultat, les lignes comportant un signe inférieur à, telles que < Content-Type: application/json, reflètent les en-têtes que vous avez envoyés.
Modifier les en-têtes par défaut à l’aide du drapeau -H
Le drapeau -H ou --header est utilisé pour transmettre des en-têtes personnalisés au serveur et peut également être utilisé à des fins de test.
Par exemple, pour modifier l'agent utilisateur de curl/7.55.1 à Your-New-User-Agent, utilisez la commande suivante :
curl -H "User-Agent: Your-New-User-Agent" http://httpbin.org/headers
Votre sortie ressemble à ceci :
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "Your-New-User-Agent",
"X-Amzn-Trace-Id": "Root=1-65fd5123-3ebe566a4681427c6996c72c"
}
}
Si vous souhaitez remplacer l’en-tête Accept */*, qui accepte tout type de contenu, par application/json, qui accepte uniquement le contenu au format JSON, utilisez la commande suivante :
curl --header "Accept: application/json" http://httpbin.org/headers
Votre résultat ressemble à ceci :
{
"headers": {
"Accept": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd55c3-05c21f81770c1c5e6343b1fc"
}
}
Remarque : dans le deuxième exemple,
--headera été utilisé à la place de-H.--headeret-Hsont interchangeables et remplissent la même fonction.
Depuis la version 7.55.0 de curl, vous pouvez également transmettre un fichier contenant vos en-têtes. Par exemple, si le nom du fichier contenant vos en-têtes est header_file, vous pouvez utiliser la commande suivante pour transmettre un fichier contenant vos en-têtes :
Curl -H @header_file
Envoyer des en-têtes personnalisés
Les en-têtes personnalisés sont définis par les développeurs et contiennent des informations supplémentaires sur les requêtes HTTP, en plus de celles fournies par les en-têtes standard.
Pour envoyer un en-tête personnalisé avec curl, vous pouvez utiliser le drapeau -H. Par exemple, si vous souhaitez envoyer un en-tête personnalisé appelé My-Custom-Header avec la valeur value de l'en-tête personnalisé, exécutez la commande suivante :
curl -H "My-Custom-Header: Value of custom header" http://httpbin.org/headers
Votre sortie ressemble à ceci :
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"My-Custom-Header": "Value of custom header",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd7d2a-3b683be160ff2965023b3a31"
}
}
Envoyer des en-têtes vides
Dans certains cas, il est nécessaire d’envoyer des en-têtes vides, par exemple pour se conformer à des exigences API spécifiques qui imposent certains en-têtes même s’ils ne contiennent aucun contenu. Par exemple,l’en-tête HTTP Strict Transport Security (HSTS)est utilisé pour imposer des connexions HTTPS sécurisées sur les sites Web. Bien que cet en-tête comprenne généralement des directives sur la durée et le comportement HSTS, l’envoyer avec une valeur vide garantit l’application immédiate du HSTS.
Vous pouvez également utiliser des en-têtes vides pour effacer ou réinitialiser des en-têtes. Par exemple, si vous souhaitez réinitialiser ou effacer un en-tête qui était précédemment défini par défaut, l’envoi d’un en-tête vide permet d’effacer la valeur de l’en-tête.
Pour envoyer un en-tête vide avec curl, vous devez spécifier le nom de l’en-tête suivi d’un point-virgule pour indiquer une valeur vide. La commande suivante vous montre comment envoyer un en-tête personnalisé vide appelé My-Custom-Header:
curl -H "My-Custom-Header;" http://httpbin.org/headers
La sortie affiche My-Custom-Header avec une valeur vide :
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"My-Custom-Header": "",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd84e2-7a42d9d62a42741e448c426f"
}
}
Supprimer un en-tête
Pour supprimer un en-tête avec curl, vous devez spécifier le nom de l’en-tête suivi d’un deux-points sans valeur.
Par exemple, pour supprimer l’en-tête User-Agent par défaut, envoyez la commande suivante :
curl -H "User-Agent:" http://httpbin.org/headers
La réponse ne contient pas l’en-tête User-Agent, ce qui confirme que l’en-tête a été supprimé :
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"X-Amzn-Trace-Id": "Root=1-65fd862d-13b181583501ae11046374a1"
}
}
Envoyer plusieurs en-têtes
Jusqu’à présent, vous avez vu des exemples qui ne comprennent qu’un seul en-tête, mais il est possible d’envoyer plusieurs en-têtes avec curl. Il vous suffit d’inclure plusieurs fois le drapeau -H.
Par exemple, si vous souhaitez envoyer deux en-têtes (Custom-Header-1 et Custom-Header-2) avec les valeurs un et deux respectivement, exécutez la commande suivante :
curl -H "Custom-Header-1: one" -H "Custom-Header-2: two" http://httpbin.org/headers
Votre résultat ressemblera à ceci :
{
"headers": {
"Accept": "*/*",
"Custom-Header-1": "one",
"Custom-Header-2": "two",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd8781-143be3502c559bc5605fc6f1"
}
}
Conclusion
Dans cet article, vous avez découvert les en-têtes HTTP et comment les envoyer avec curl.
Si vous recherchez une solution complète de Scraping web, essayezBright Data. Elle propose des outils et des services tels quedes services Proxy, qui permettent de garantir l’anonymat et d’éviter le blocage des adresses IP, etWeb Unlocker, qui vous aide à accéder à des contenus soumis à des restrictions géographiques sans CAPTCHA.
Commencez votre essai gratuit dès aujourd’hui !