it-swarm.com.de

CURL, um auf eine Seite zuzugreifen, für die eine Anmeldung von einer anderen Seite erforderlich ist

Ich habe 2 Seiten: xyz.com/a Und xyz.com/b. Ich kann nur dann auf xyz.com/b Zugreifen, wenn ich mich zuerst bei xyz.com/a Anmelde. Wenn ich auf xyz.com/b Zugreife, ohne den anderen zu durchlaufen, wird mir der Zugriff einfach über den Browser verweigert (keine Umleitung zum Login). Sobald ich mich unter xyz.com/a Angemeldet habe, kann ich auf die andere zugreifen.

Mein Problem macht dies mit dem Befehl curl. Ich kann mich mit curl erfolgreich bei xyz.com/a Anmelden, versuche dann aber xyx.com/b Und bekomme keinen Zugriff.

Ich benutze folgendes:

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

Ich habe versucht, die zweite Zeile mit und ohne den Benutzer-/Kennwortteil zu verwenden, und es funktioniert immer noch nicht. Beide Seiten verwenden dieselbe Zertifizierungsstelle, daher ist dies kein Problem. Irgendwelche Vorschläge? Vielen Dank

96
ms1013

Die Website verwendet wahrscheinlich Cookies , um Ihre Sitzungsinformationen zu speichern. Wenn du rennst

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curl wird zweimal in zwei separaten Sitzungen ausgeführt. Wenn der zweite Befehl ausgeführt wird, sind die vom ersten Befehl gesetzten Cookies nicht verfügbar. Es ist so, als ob Sie sich in einer Browsersitzung bei Seite a angemeldet und versucht hätten, in einer anderen auf Seite b zuzugreifen.

Was Sie tun müssen, ist , die mit dem ersten Befehl erstellten Cookies zu speichern :

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

und lesen Sie sie dann wieder ein, wenn Sie die zweite ausführen:

curl --cookie ./somefile https://xyz.com/b

Alternativ können Sie versuchen, beide Dateien mit demselben Befehl herunterzuladen. Ich denke, dass dabei dieselben Cookies verwendet werden.

116

Sie können sich auch über einen Browser anmelden und den Befehl mit allen Kopfzeilen einschließlich Cookies abrufen:

Öffnen Sie die Registerkarte Netzwerk der Entwicklertools, melden Sie sich an, navigieren Sie zur gewünschten Seite und verwenden Sie "Als cURL kopieren".

screenshot

88
user

Nach einigem googeln habe ich folgendes gefunden:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

Keine Ahnung, ob es funktioniert, aber es könnte Sie in die richtige Richtung führen.

46
Joe Mills