2017-08-18 2 views
0

Ich möchte Zugriff auf eine JSON-Seite erhalten, die Daten enthält. Say, es ist da unter http://example.com/home/apples.json Es ist geschützt, so dass eine Login-Seite angezeigt wird. Wenn ich es manuell besuchen wollte, gehe ich zuerst zu http://example.com/ Dort erhalte ich ein Login-Menü und nach dem Login als Benutzer "test" mit Passwort "test" besuchenden http://example.com/home/apples.json again wird mir die JSON-Daten zeigen.curl - Wie bekomme ich einen Cookie nach dem Login, um einen curl-Befehl zu senden?

Wenn ich ein

curl -u test:test http://example.com/home/apples.json -v 

ich auf der Login-Seite landen. (Trotz Authentifizierung.)

Wenn ich http://example.com/ besuche und mich manuell anmelde, erhalte ich nach der Anmeldung einen Cookie. Sagen wir, dieser Cookie heißt ltoken und erhält den Wert "dj8f". Es wird nur nach einer erfolgreichen Anmeldung angezeigt. Wenn ich es über den Browser nachschlagen und kopieren Sie die Cookie-Daten und hängen Sie es an die curl Befehl:

curl -b "ltoken="dj8f" http://example.com/home/apples.json -v 

wird es funktionieren.

Wie kann ich die Cookie-Daten nach der Anmeldung abrufen, ohne sie manuell zu tun? Ist es über Bash Shell Scripting möglich? Wenn ja wie? Oder wie wäre es in einem groovigen Skript gemacht?

Antwort

1

Sie müssen zuerst eine ordnungsgemäße Anmeldung mit Curl durchführen. Navigieren Sie dazu auf die Anmeldeseite und sehen Sie sich den Quellcode an. Das Anmeldeformular sollte in etwa so aussehen.

<form action="http://example.com/login/target" method="POST"> 
    <input type="text" name="username" /> 
    <input type="password" name="passphrase" /> 
    <input type="submit" value="Log in" /> 
</form> 

(Ich gehe davon aus, dass es keine versteckten Eingabefelder. Versteckte Eingabefelder oft gegen Request Forgery zum Schutz verwendet werden, die im Grunde ist das, was wir tun werden.)

Von diesem snipped Sie haben um das Ziel der Login-Anfrage zu extrahieren (in diesem Beispiel http://example.com/login/target), die Namen der HTML-Eingabefelder (hier username und passphrase). Um den Login-Vorgang durchführen, sollten Sie die Login-Daten an das Ziel, zum Beispiel senden durch Ausführen

curl --cookie-jar cookies.txt --form passphrase=test --form username=test http://example.com/login/target 

(Bitte beachten Sie, dass in der Regel nicht ratsam, Ihr Passwort auf der Kommandozeile auf diese Weise zu geben. Ihr Passwort ist wahrscheinlich in einem Befehlsverlauf gespeichert und könnte gestohlen werden.)

Die Option --cookie-jar teilt curl mit, alle Cookies in einer Datei zu speichern. Wenn die Anmeldung erfolgreich ist und der Server Sitzungscookies setzt, speichert curl sie in dieser Textdatei.

Nach einer erfolgreichen Anmeldung sollten Sie in der Lage sein, auf die JSON-Datei zuzugreifen, wenn die Anfrage die Cookies aus dem Cookie-Jar enthält. Dies kann mit dem Argument -b erreicht werden. Wenn -b das Zeichen = nicht enthält, verwendet curl den Inhalt der Datei als Cookies.

curl -b cookies.txt http://example.com/home/apples.json -v 
+0

Ich habe es versucht, aber der Cookie in der Datei geschrieben enthält nicht die relevanten Cookie nach der Anmeldung, sondern nur diejenigen vor dem Login. Daher bezieht sich der Befehl currence nur auf die Anmeldeseite. Ich habe das in der Beschreibung besser formuliert. – kumoyadori

+0

Nun, ok, ich habe angenommen, dass das Login funktioniert ... Wenn das nicht der Fall ist, müssen Sie * das Anmeldeformular ausfüllen *. AFAIK Die Option '-u' wird verwendet, um Anmeldeinformationen über HTTP-Felder zu senden.Dies wird heutzutage selten verwendet. Normalerweise müssen Sie sich die '' der Anmeldeseite ansehen und herausfinden: die Namen der Name/Passwort Felder und das Ziel des Sendens. Sie können dann die Formulardaten mit '--form' oder' --data' senden. – sauerburger

+0

Ich habe skizziert, wie das gemacht werden könnte. – sauerburger

Verwandte Themen