Je sais qu'en utilisant cURL
, je peux voir mes cookies/en-têtes reçus en utilisant
curl --head www.google.com
Et je sais que je peux ajouter des en-têtes à ma demande en utilisant
curl --cookie "Key=Value" www.google.com
Je travaille actuellement sur le test d'un problème nécessitant des cookies persistants, et il peut y en avoir beaucoup.
Comment préserver efficacement les cookies entre deux requêtes
cURL
?
Si possible en utilisant un fichier temporaire pour le stockage.
Utilisez le paramètre --cookie-jar
ou --dump-header
pour enregistrer les cookies reçus dans un fichier. Le paramètre --cookie
peut relire les cookies de ce fichier ultérieurement.
-b, --cookie <name = data>
(HTTP) Transmettez les données au serveur HTTP sous forme de cookie. Ce sont supposément les données précédemment reçues du serveur dans une ligne "Set-Cookie:". Les données doivent être au format "NAME1 = VALUE1; NAME2 = VALUE2".
Si aucun symbole '=' n'est utilisé dans la ligne, il est traité comme un nom de fichier à utiliser pour lire les lignes de cookies précédemment stockées dans, qui doivent être utilisées dans cette session si elles correspondent. L'utilisation de cette méthode active également le moteur de cookie, ce qui permet également à curl d'enregistrer les cookies entrants, ce qui peut s'avérer utile si vous l'utilisez en combinaison avec l'option -L, --location. Le format de fichier du fichier à partir duquel lire les cookies doit être un en-tête HTTP simple (style Set-Cookie) ou le format de fichier de cookie Netscape/Mozilla.
Le fichier spécifié avec -b, --cookie est uniquement utilisé en entrée. Aucun cookie ne sera écrit dans le fichier. Pour stocker les cookies, utilisez l'option -c, --cookie-jar.
Faites preuve de prudence si vous utilisez cette option et que plusieurs transferts peuvent se produire. Si vous utilisez NAME1 = VALUE1; format, ou dans un fichier, utilisez le format Set-Cookie et ne spécifiez pas de domaine. Le cookie est ensuite envoyé pour tous les domaines (même après les redirections) et ne peut pas être modifié par un cookie défini sur le serveur. Si le moteur de cookies est activé et qu'un serveur définit un cookie du même nom, les deux seront envoyés lors d'un prochain transfert sur ce serveur, probablement pas ce que vous vouliez. Pour résoudre ces problèmes, définissez un domaine dans Set-Cookie (cela inclura les sous-domaines) ou utilisez le format Netscape.
Si cette option est utilisée plusieurs fois, la dernière sera utilisée.
-c, --cookie-jar <nom de fichier>
(HTTP) Spécifiez dans quel fichier vous souhaitez que Curl écrive tous les cookies une fois l'opération terminée. Curl écrit tous les cookies précédemment lus à partir d'un fichier spécifié, ainsi que tous les cookies provenant de serveurs distants. Si aucun cookie n'est connu, aucune donnée ne sera écrite. Le fichier sera écrit en utilisant le format de fichier de cookie Netscape. Si vous définissez le nom de fichier sur un tiret unique, "-", les cookies seront écrits sur stdout.
Cette option de ligne de commande activera le moteur de cookie qui enregistre curl et utilise des cookies. Une autre façon de l'activer consiste à utiliser l'option -b, --cookie.
Si le cookie JAR ne peut pas être créé ou écrit, l'opération complète de curl n'échouera pas ou même rapportera une erreur clairement Utiliser -v affichera un avertissement, mais c’est le seul retour visible que vous obtiendrez sur cette situation potentiellement mortelle.
Depuis 7.43.0, les cookies importés au format Set-Cookie sans nom de domaine ne sont pas exportés par cette option.
Si cette option est utilisée plusieurs fois, le dernier nom de fichier spécifié sera utilisé.
-D, --dump-header <fichier>
Ecrivez les en-têtes de protocole dans le fichier spécifié.
Cette option est pratique à utiliser lorsque vous souhaitez stocker les en-têtes qu'un site HTTP vous envoie. Les cookies des en-têtes peuvent ensuite être lus lors d'une seconde invocation de boucle en utilisant l'option -b, --cookie! L'option -c, --cookie-jar est un meilleur moyen de stocker des cookies.
Lorsqu'elles sont utilisées en FTP, les lignes de réponse du serveur FTP sont considérées comme des "en-têtes" et sont donc enregistrées ici.
Si cette option est utilisée plusieurs fois, la dernière sera utilisée
Sinon, au lieu d'utiliser la ligne de commande cURL app , écrivez un code utilisant la bibliothèque libCurl . Cela vous donnera un contrôle plus direct sur la gestion des cookies. libCurl a plusieurs fonctionnalités liées aux cookies HTTP:
Options pour curl_easy_getinfo()
:
Options pour curl_easy_setopt()
:
CURLOPT_COOKIE - définir le contenu de l'en-tête HTTP Cookie
CURLOPT_COOKIEFILE - nom du fichier depuis lequel lire les cookies
CURLOPT_COOKIEJAR - nom du fichier dans lequel stocker les cookies
CURLOPT_COOKIESESSION - démarrer une nouvelle session de cookie
CURLOPT_COOKIELIST - ajouter ou manipuler des cookies conservés en mémoire
Ensuite, vous pouvez stocker les cookies comme vous le souhaitez et les affecter au besoin à des sessions HTTP ultérieures.
curl -b cookie.txt -c cookie.txt <url>
ou curl --cookie cookie.txt --cookie-jar cookie.txt <url>
va à la fois stocker et envoyer des cookies enregistrés.