Wie komme ich mit Wget an der Login-Seite vorbei?

Ich versuche, Wget zum Herunterladen einer Seite zu verwenden, aber ich komme nicht über den Anmeldebildschirm hinaus.

Wie sende ich den Benutzernamen / das Passwort mit Post-Daten auf der Anmeldeseite und lade dann die aktuelle Seite als authentifizierter Benutzer herunter?

Solutions Collecting From Web of "Wie komme ich mit Wget an der Login-Seite vorbei?"

Basierend auf der Handbuchseite:

# Log in to the server. This only needs to be done once. wget --save-cookies cookies.txt \ --keep-session-cookies \ --post-data 'user=foo&password=bar' \ --delete-after \ http://server.com/auth.php # Now grab the page or pages we care about. wget --load-cookies cookies.txt \ http://server.com/interesting/article.php 

--post-data Sie sicher, dass der Parameter --post-data richtig --post-data codiert ist (insbesondere --post-data Zeichen) oder die Anfrage wahrscheinlich fehlschlägt. Stellen Sie außerdem sicher, dass user und password die richtigen Schlüssel sind; Sie können die richtigen Schlüssel herausfinden, indem Sie den HTML-Code der Anmeldeseite durchsuchen (schauen Sie in die “inspect element” -function Ihres Browsers und finden Sie das name Attribut in den Feldern Benutzername und Passwort).

Ich habe Cookies einer bestehenden Verbindung zu wget direkt mit –no-cookies und dem Cookie HTTP Request Header gegeben. In meinem Fall war es ein Moodle Uni-Login, bei dem die Anmeldung komplexer aussieht (mehrere Anfragen mit einem Login-Ticket). Ich habe –post-data hinzugefügt, weil es eine POST-Anfrage war. Zum Beispiel erhalten Sie alle Moodle Benutzer Liste:

wget --no-cookies --header "Cookie: =" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php

Ich hatte das gleiche Problem. Meine Lösung bestand darin, die Anmeldung über Chrome durchzuführen und die Cookie-Daten in einer Textdatei zu speichern. Dies ist mit dieser Chrome-Erweiterung problemlos möglich: Chrome cookie.txt-Exporterweiterung .

Wenn Sie die Cookie-Daten erhalten, gibt es auch ein Beispiel, wie Sie sie mit wget verwenden können. Eine einfache Copy-Paste-Befehlszeile wird Ihnen zur Verfügung gestellt.

Wenn Sie es zum einmaligen Gebrauch benötigen, können Sie sich über den Browser einloggen und die benötigten Header anschließend kopieren:

Bildschirmfoto Verwenden Sie “Kopieren als cURL” in der Registerkarte “Netzwerk” von Developer Tools (laden Sie die Seite nach dem Öffnen neu) und ersetzen Sie --header Header-Flag -H durch wget’s --header .

Wenn sie die Standardauthentifizierung verwenden:

 wget http://username:password@www.domain.com/page.html 

Wenn sie POSTed-Formulardaten verwenden, müssen Sie stattdessen etwas wie cURL verwenden.

Sie benötigen keine cURL, um Posted-Form-Daten zu machen. --post-data 'key1=value1&key2=value2' funktioniert --post-data 'key1=value1&key2=value2' . Hinweis: Sie können auch einen Dateinamen an wget mit den POST-Daten in der Datei übergeben.

Ich wollte einen Einzeiler, der keine Dateien heruntergeladen hat; Hier ist ein Beispiel, wie die Cookie-Ausgabe in die nächste Anfrage geleitet wird. Ich habe nur Folgendes auf Gentoo getestet, aber es sollte in den meisten * nix-Umgebungen funktionieren:

wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' (dies ist eine Zeile, obwohl es wahrscheinlich in Ihrem Browser wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' )

Wenn Sie möchten, dass die Ausgabe in einer Datei gespeichert wird, ändern Sie -O - in -O /some/file/name

Ich benutzte eine Lösung, die lynx und wget verwendete. Wenn Sie wget verwenden möchten, um Dateien von einer Site herunterzuladen, die eine Anmeldung erfordern, benötigen Sie nur eine Cookie-Datei. Um die Cookie-Datei zu generieren, wähle ich lynx. Lynx ist ein Text-Web-Browser. Als erstes benötigen Sie eine Konfigurationsdatei für lynx, um den Cookie zu speichern. Erstellen Sie eine Datei lynx.cfg. Schreiben Sie diese Konfiguration in die Datei.

 SET_COOKIES:TRUE ACCEPT_ALL_COOKIES:TRUE PERSISTENT_COOKIES:TRUE COOKIE_FILE:cookie.file 

Dann starte lynx mit diesem Befehl:

 lynx -cfg=lynx.cfg http://the.site.com/login 

Nachdem Sie den Benutzernamen und das Passwort eingegeben haben und wählen Sie “Bewahren Sie mich auf diesem PC” oder etwas Ähnliches. Wenn Sie sich erfolgreich anmelden, sehen Sie eine schöne Text-Webseite der Website. Und Sie loggen sich aus. Im aktuellen Verzeichnis finden Sie eine Cookie-Datei namens cookie.file. Das brauchen wir für wget.

Dann kann wget mit diesem Befehl Dateien von der Site herunterladen.

 wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz 

Beispiel, um mit wget auf dem Server eine große Dateiverbindung herunterzuladen, die in Ihrem Browser erhalten werden kann.

Im Beispiel mit Google Chrome.

Loggen Sie sich dort ein, wo Sie es brauchen, und klicken Sie auf Download. Gehe zum Download und kopiere deinen Link.

Bildbeschreibung hier eingeben

Dann öffne DevTools auf einer Seite, auf der du dich eingeloggt hast, gehe zu Console und hol dir deine Cookies, indem du document.cookie eingibst

Bildbeschreibung hier eingeben

Gehen Sie nun zum Server und laden Sie Ihre Datei herunter: wget --header "Cookie: "

Bildbeschreibung hier eingeben