Wie kann ich mit wget / curl von einer Website herunterladen, bei der ich angemeldet bin?

46

Einige Teile von Wikipedia werden anders angezeigt, wenn Sie angemeldet sind. Ich möchte Benutzerseiten erstellen, damit sie so aussehen, als ob ich angemeldet wäre.

Gibt es eine Möglichkeit, Benutzerseiten wie diese zu erstellen?

http://en.wikipedia.org/wiki/User:A

Dies ist die Anmeldeseite:

http://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Login&campaign=ACP3
user784637
quelle

Antworten:

50

Der einfache Weg: Loggen Sie sich mit Ihrem Browser ein und geben Sie die Cookies an wget

Einfachste Methode: Im Allgemeinen müssen Sie wget oder curl mit den (angemeldeten) Cookies einer bestimmten Website bereitstellen, damit diese Seiten abrufen können, als wären Sie angemeldet .

Wenn Sie Firefox verwenden, können Sie dies ganz einfach über das Add-On " Cookies exportieren" tun . Installieren Sie das Add-On und:

  1. Gehen Sie zu Extras ... Cookies exportieren und speichern Sie die cookies.txtDatei (Sie können den Dateinamen / das Ziel ändern).
  2. Öffnen Sie ein Terminal und verwenden Sie wgetmit der --load-cookies=FILENAMEOption, z

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • Für locken ist escurl --cookie cookies.txt ...

(Ich werde versuchen, diese Antwort für Chrome / Chromium-Nutzer zu aktualisieren.)

Der schwierige Weg: Verwenden Sie Curl (vorzugsweise) oder Wget , um die gesamte Sitzung zu verwalten

  • Eine ausführliche Anleitung würde den Rahmen dieser Antwort sprengen, Sie verwenden jedoch die Option curl mit den Optionen --cookie-jaroder wget--save-cookies --keep-session-cookies zusammen mit der HTTP / S-PUT-Methode, um sich bei einer Site anzumelden, die Anmelde-Cookies zu speichern und sie dann zu verwenden Einen Browser simulieren.
  • Dazu muss natürlich die HTML-Quelle für die Anmeldeseite durchsucht werden (Namen der Eingabefelder usw. abrufen), und es ist oft schwierig, für Websites zu arbeiten, die über die einfache Anmeldung / Kennwortauthentifizierung hinausgehen.
  • Tipp: Wenn Sie diesen Weg gehen, ist es oft viel einfacher, mit der mobilen Version einer Website (falls verfügbar) umzugehen , zumindest für den Authentifizierungsschritt.
ish
quelle
1
Netter Tipp. Der Code für die mobile Website ist oft viel sauberer.
CousinCocaine
4
Wie sieht so eine cookies.txt aus?
Frederick Nord
Dieses Add-On "Cookies exportieren" hat eine Cookie-Datei mit den Cookies für jede einzelne Website erstellt, auf die ich in Firefox zugegriffen habe. Wenn Sie also dieser Antwort folgen, werden alle Ihre Cookies auf der Website angezeigt, auf die Sie gerade zugreifen. Ich halte dies für eine Sicherheitslücke in dieser Antwort. Sie können dieses Problem leicht grep mydomain cookies.txt > mydomain-cookies.txt
umgehen,
Sie können das Cookie-Manager- Add-On in Firefox verwenden, um nur ausgewählte Cookies zu exportieren.
Hans Ginzel
7

Eine weitere einfache Lösung, die bei mir ohne zusätzliche Installation funktioniert hat:

  • Öffnen Sie die Registerkarte "Netzwerk" des Tools "Web Developer" : Strg-Umschalt-E
  • Besuchen Sie die Seite, die Sie speichern möchten (z. B. ein Foto hinter einem Login)
  • Klicken Sie mit der rechten Maustaste auf die Anforderung und wählen Sie "Kopieren" -> "Als CURL kopieren".

Dadurch erhalten Sie einen Befehl, den Sie direkt in Ihre Shell einfügen können und der alle Ihre Cookie-Anmeldeinformationen enthält, z

curl 'https://mysite.test/my-secure-dir/picture1.jpg' \ 
-H 'User-Agent: Mozilla/5.0 ...' \
-H 'Cookie: SESSIONID=abcdef1234567890'

Sie können dann die URL im Befehl ändern, um das abzurufen, was Sie möchten.

BlackShift
quelle
4

Mit cURL ist der Umgang mit Cookies auf beide Arten sehr einfach.

curl www.target-url.com -c cookie.txtDann wird eine Datei mit dem Namen cookie.txt gespeichert. Aber Sie müssen eingeloggt sein , so muß mit Argumenten verwenden --data wie: curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt. Sobald Sie ein protokolliertes Cookie erhalten, können Sie es senden mit: curl www.target-url.com/?user-page.php -b cookie.txt

Verwenden Sie zum Speichern und Senden einfach -c (--cookie) oder -b (--cookie-jar).

Hinweis 1: Die Verwendung von cURL CLI ist viel einfacher als PHP und möglicherweise auch schneller.

Um den endgültigen Inhalt zu speichern, können Sie einfach > filename.htmlIhren cURL-Befehl hinzufügen und dann den vollständigen HTML-Code speichern.

Anmerkung 2 zu "full": Sie können mit cURL kein Javascript rendern, sondern nur den Quellcode.

erm3nda
quelle
1
-Xparameter steht für "do post", aber using --data=xxx -Xist implizit, so dass Sie es sicher entfernen können.
erm3nda
-bistread cookie
Timo
3

Für diejenigen, die sich noch für diese Fragen interessieren, gibt es eine sehr nützliche Chrome-Erweiterung namens CurlWGet , mit der Sie eine wget/ -Anforderungcurl mit Authentifizierungsmaßnahmen usw. mit einem Klick generieren können . Führen Sie die folgenden Schritte aus, um diese Erweiterung zu installieren:

  1. Installieren Sie die Erweiterung aus dem Chrome Webstore .
  2. Rufen Sie die Webseite auf, die Sie herunterladen möchten.
  3. Starten Sie den Download.
  4. Die Erweiterung generiert einen Link für Sie.

Genießen!

Jehon
quelle
2

Der Blog-Beitrag Wget mit Firefox-Cookies zeigt, wie Sie auf die SQLite-Datendatei zugreifen, in der Firefox seine Cookies speichert. Auf diese Weise müssen die Cookies für die Verwendung mit wget nicht manuell exportiert werden. Ein Kommentar deutet darauf hin, dass es nicht mit Sitzungscookies funktioniert, aber für die Websites, mit denen ich es ausprobiert habe, hat es funktioniert.

Falko Menge
quelle
2

Schauen Sie sich cliget für Firefox an.

Beim Herunterladen können Sie im letzten Download-Dialogfeld den Download als Curl-Befehlszeile in die Zwischenablage kopieren.

weberjn
quelle
1

Hast du das versucht?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A
Corey Whitaker
quelle
ja - leider hat das nicht funktioniert = (
user784637
6
Hinweis: Diese Syntax funktioniert nur für die grundlegende HTTP-Authentifizierung (bei der Ihr Browser ein spezielles Dialogfeld für Benutzername / Kennwort anzeigt), nicht für die webbasierte Authentifizierung.
ish
Das URL-Format für die grundlegende HTTP-Authentifizierung lautet admin: [email protected]. Wie @izx jedoch bereits sagte, handelt es sich bei der grundlegenden HTTP-Funktion um eine Browserfunktion, nicht um PHP-Programmierung oder Code. Wenn Sie eines Tages auf eine durch Zugriff geschützte URL zugreifen müssen, können Sie diesen Modus verwenden: D
erm3nda
Ich habe nicht abgelehnt, aber dies ist kein guter Weg, um sich zu authentifizieren: Wenn Sie versehentlich solche Skripte veröffentlichen, können die Leute Ihr Passwort verwenden.
Willem Van Onsem
1
Was ist mit den Abstimmungen? Vielleicht ist nicht alles eine Antwort, aber immer noch eine Antwort.
Overcode
1

Versuchen Sie etwas wie:

wget --keep-session-cookies --save-cookies cookies.txt --post-data 'user=goyamy&passwrd=mypassword' http://forum.ubuntu-it.org/

Siehe auch diesen Link:

Wie lade ich diese Webseite mit wget herunter?

Kenorb
quelle
Genau wie bei jeder Ausgabe. Verwenden Sie > filename.htmldiese Option, um die Ausgabe im aktuellen Verzeichnis zu speichern oder einen vollständigen Dateipfad zu erstellen. Dies gilt sowohl für Linux- als auch für Windows-Systeme.
erm3nda
Ich sehe also, dass wget viele Funktionen wie cURL oder umgekehrt hat. Es kann POST ausführen und sich auf Websites anmelden. Interessant.
erm3nda
1

Für kompliziertere website-basierte Anmeldungen sollten Sie auch ein Python-Skript und ein Modul verwenden, das einen Browser imitiert, z. B. http://wwwsearch.sourceforge.net/mechanize/ anstelle von curloder wget.

Auf diese Weise werden Sitzungscookies automatisch gehandhabt. Sie können Links folgen und Anmeldeformulare ausfüllen und so den Anmeldevorgang selbst "skripten", als ob Sie Ihren Webbrowser verwenden würden.

StW
quelle
Ja, mechanisieren kann sehr schön sein. Auch (und ursprünglich) in Perl erhältlich, wenn das mehr Ihre Tasse Tee ist.
Andol