it-swarm.com.de

Speichern Sie Cookies zwischen zwei Curl-Anfragen

Ich weiß, dass ich mit cURL meine empfangenen Cookies/Header sehen kann

curl --head www.google.com

Und ich weiß, dass ich meiner Anfrage Header hinzufügen kann

curl --cookie "Key=Value" www.google.com

Ich arbeite gerade daran, ein Problem zu testen, für das permanente Cookies erforderlich sind, und es kann viele davon geben.

Wie kann ich Cookies zwischen zwei cURL-Anforderungen effizient aufbewahren?

Wenn möglich, verwenden Sie eine temporäre Datei zur Speicherung.

31
Matt Clark

Verwenden Sie den Parameter --cookie-jar oder --dump-header, um die erhaltenen Cookies in einer Datei zu speichern. Der --cookie-Parameter kann die Cookies später aus dieser Datei zurücklesen.

-b, --cookie <name = data> 

(HTTP) Übergeben Sie die Daten als Cookie an den HTTP-Server. Es handelt sich vermutlich um die Daten, die zuvor vom Server in einer "Set-Cookie:" -Zeile empfangen wurden. Die Daten sollten im Format "NAME1 = VALUE1; NAME2 = VALUE2" sein. 

Wenn in der Zeile kein '=' Symbol verwendet wird, wird es als Dateiname behandelt, um zuvor gespeicherte Cookie-Zeilen aus zu lesen, die in dieser Sitzung verwendet werden sollten, wenn sie übereinstimmen. Bei Verwendung dieser Methode wird auch die Cookie-Engine aktiviert, wodurch Curl auch eingehende Cookies aufzeichnet. Dies kann nützlich sein, wenn Sie dies in Kombination mit der Option -L, --location verwenden. Das Dateiformat der Datei, aus der Cookies gelesen werden sollen, sollte einfache HTTP-Header (Set-Cookie-Stil) oder das Cookie-Dateiformat Netscape/Mozilla sein. 

Die mit -b, --cookie angegebene Datei wird nur als Eingabe verwendet. Es werden keine Cookies in die Datei geschrieben. Zum Speichern von Cookies verwenden Sie die Option -c, --cookie-jar

Seien Sie vorsichtig, wenn Sie diese Option verwenden und mehrere Übertragungen auftreten können. Wenn Sie den NAME1 = VALUE1 verwenden; Wenn Sie formatieren oder in einer Datei das Set-Cookie-Format verwenden und keine Domäne angeben, wird das Cookie für jede Domäne gesendet (auch wenn Umleitungen gefolgt werden) und kann nicht durch ein Server-Set-Cookie geändert werden. Wenn die Cookie-Engine aktiviert ist und ein Server ein Cookie mit demselben Namen setzt, werden beide bei einer zukünftigen Übertragung an diesen Server gesendet, wahrscheinlich nicht wie beabsichtigt. Um diese Probleme zu beheben, legen Sie eine Domäne in Set-Cookie fest (dabei werden Unterdomänen eingeschlossen) oder verwenden Sie das Netscape-Format. 

Wenn diese Option mehrmals verwendet wird, wird die letzte Option verwendet. 

-c, --cookie-jar <Dateiname> 

(HTTP) Geben Sie an, in welche Datei curl nach einem abgeschlossenen Vorgang alle Cookies schreiben soll. Curl schreibt alle Cookies, die zuvor aus einer angegebenen Datei gelesen wurden, sowie alle Cookies, die von den Remote-Servern empfangen wurden. Wenn keine Cookies bekannt sind, werden keine Daten geschrieben. Die Datei wird im Netscape-Cookie-Dateiformat geschrieben. Wenn Sie den Dateinamen auf einen einzelnen Bindestrich "-" setzen, werden die Cookies in stdout geschrieben. 

Diese Befehlszeilenoption aktiviert die Cookie-Engine, die die Aufzeichnung von Cookies und die Verwendung von Cookies ermöglicht. Eine andere Möglichkeit zur Aktivierung ist die Verwendung der Option -b, --cookie. 

Wenn die Keksdose nicht erstellt oder beschrieben werden kann, schlägt der gesamte Rollvorgang nicht fehl und meldet auch nicht eindeutig einen Fehler. Wenn Sie -v verwenden, wird eine Warnung angezeigt. Dies ist jedoch das einzige sichtbare Feedback, das Sie zu dieser möglicherweise tödlichen Situation erhalten. 

Seit 7.43.0 werden Cookies, die im Set-Cookie-Format ohne Domänennamen importiert wurden, mit dieser Option nicht exportiert. 

Wenn diese Option mehrmals verwendet wird, wird der zuletzt angegebene Dateiname verwendet. 

-D, --dump-Header <Datei> 

Schreiben Sie die Protokollheader in die angegebene Datei. 

Diese Option ist praktisch, wenn Sie die Header speichern möchten, die eine HTTP-Site an Sie sendet. Cookies aus den Headern könnten dann in einem zweiten Aufruf mit der Option -b, --cookie gelesen werden! Die Option -c, --cookie-jar ist eine bessere Methode zum Speichern von Cookies

Bei der Verwendung in FTP werden die Antwortzeilen des FTP-Servers als "Header" betrachtet und somit dort gespeichert. 

Wenn diese Option mehrmals verwendet wird, wird die letzte Option verwendet

Alternativ können Sie anstelle der Befehlszeile cURL app Code schreiben, der die Bibliothek libCurl verwendet. Dadurch haben Sie eine direktere Kontrolle über das Cookie-Handling. libCurl hat mehrere Funktionen im Zusammenhang mit HTTP-Cookies:

Optionen für curl_easy_getinfo():

Optionen für curl_easy_setopt():

Anschließend können Sie die Cookies nach Belieben speichern und bei Bedarf späteren HTTP-Sitzungen zuweisen.

48
Remy Lebeau

curl -b cookie.txt -c cookie.txt <url> oder curl --cookie cookie.txt --cookie-jar cookie.txt <url> speichert und speichert gespeicherte Cookies.

0
dw1