2 Stimmen

cURL-Cookie-Syntax (vom Bash-CLI, nicht von der Cookie-Datei)

Ich habe einen Webserver, der mir denselben Cookie-Wert zurückgibt, den ich ihm in meiner Anfrage geschickt habe. Zu diesem Zweck habe ich die Datei --cookie erfolgreich verwendet (abzüglich eines kleinen Geschwindigkeitsproblems, das auf ein Problem mit Tabs zu Leerzeichen in der Cookie-Datei zurückzuführen ist).

Wenn ich denselben Befehl ausführe, aber den Cookie-Namen und -Wert im Befehl und nicht in der Cookie-Datei eingebe, antwortet mein Server leider nicht mit den gewünschten Ergebnissen.

Nach den cURL-Dokumenten sollte etwas wie dieses funktionieren:

curl --cookie 'cookiename=cookievalue' --cookie-jar - http://my.site.com/page/with/cookies -v

Das ist aber nicht der Fall. Wenn ich jedoch die tabulatorgetrennte Cookie-Datei anstelle der Parameter in der Befehlszeile verwende, funktioniert es erfolgreich. Außerdem habe ich so ziemlich jede Permutation dieser Cookie-Parameter in der Befehlszeile ausprobiert, ohne Erfolg: tabulatorgetrennt, name=cookiename;value=cookievalue(etc), mit Kommas, mit dem Pfad, als --header, etc etc.

Wenn ich die ausgehenden Anfragen Seite an Seite vergleiche, sehe ich keinen offensichtlichen Unterschied zwischen den erfolgreichen und den erfolglosen Anfragen, aber die Antwort liefert nicht die gewünschten Ergebnisse, wenn ich Cookies in der Befehlszeile ohne die Cookie-Datei übergebe. Welche wichtige, aber subtile Nuance übersehe ich hier?

9voto

dldnh Punkte 8866

Ich war neugierig, ob dies ein Problem auf meinem Server wäre und was ich zur Lösung des Problems benötigen würde.

Als Erstes habe ich mit einem Browser getestet, um das Grundverhalten zu untersuchen.

Zunächst stellte ich eine Verbindung her, um sicherzustellen, dass noch keine Cookies gesetzt waren:

http://hostname/test/testcookie.php

Cookie: array(0) {
}

Dann habe ich eine Verbindung zu meinem Skript hergestellt, um ein Cookie zu setzen.

http://hostname/test/setcookie.php

Cookie set.

Dann habe ich überprüft, ob der Browser das neue Cookie sendet:

http://hostname/test/testcookie.php

Cookie: array(1) {
  ["cookiename"]=>
  string(11) "cookievalue"
}

Nachdem ich das Verhalten des Browsers und des Servers überprüft hatte, war es an der Zeit, die Dinge von der Kommandozeile aus zu erledigen, indem ich curl .

Zuerst werden wir sehen, was passiert, wenn wir nicht versuchen, ein Cookie an den Server zu senden:

$ curl -s "http://hostname/test/testcookie.php"

Und hier ist das Ergebnis:

Cookie: array(0) {
}

Als Nächstes werden wir sehen, was passiert, wenn wir ein Cookie senden, indem wir --cookie wie in der Frage erwähnt:

$ curl -s --cookie "cookiename=cookievalue" "http://hostname/test/testcookie.php"

Cookie: array(1) {
  ["cookiename"]=>
  string(11) "cookievalue"
}

Dies zeigt, dass die --cookie Parameter tut funktionieren und vielleicht hat der Betreiber andere Probleme, die eine Fehlersuche erfordern.

Schauen wir uns nun spaßeshalber an, was passiert, wenn wir eine Cookie-Datei verwenden und das Skript zum Setzen von Cookies aufrufen:

$ curl -s --cookie-jar /tmp/cookiefile "http://hostname/test/setcookie.php"

Cookie set.

So sieht das Cookie in der Datei aus:

Hostname tab FALSCH tab /test/ tab FALSCH tab 1333484771 tab Cookiename tab Kochwert

Und jetzt rufen wir den Cookie-Tester auf und verwenden diesmal die Cookie-Datei.

$ curl -s --cookie /tmp/cookiefile "http://hostname/test/testcookie.php"

Cookie: array(1) {
  ["cookiename"]=>
  string(11) "cookievalue"
}

Ich hoffe, dies hilft bei der Behebung von Cookie-Problemen, die jemand haben könnte.


Und hier sind die Dateien, die ich auf meinem Server verwendet habe, in meinem /test Pfad.

Hier ist /www/test/testcookie.php:

<?php
header("Content-type: text/plain");
echo "Cookie: ";
var_dump($_COOKIE);
?>

Und hier ist /www/test/setcookie.php:

<?php
header("Content-type: text/plain");
setcookie("cookiename", "cookievalue", time()+86400 );
?>
Cookie set.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X