web-dev-qa-db-fra.com

Enregistrer les cookies entre deux demandes de curl

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.

31
Matt Clark

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():

Ensuite, vous pouvez stocker les cookies comme vous le souhaitez et les affecter au besoin à des sessions HTTP ultérieures.

48
Remy Lebeau

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.

0
dw1