Ich versuche, mit Wget eine Seite herunterzuladen, komme aber nicht über den Anmeldebildschirm hinaus.
Wie sende ich den Benutzernamen / das Passwort mithilfe der Post-Daten auf der Anmeldeseite und lade dann die eigentliche Seite als authentifizierter Benutzer herunter?
Antworten:
Basierend auf der Handbuchseite:
Stellen Sie sicher, dass der
--post-data
Parameter richtig prozentual codiert ist (insbesondere kaufmännisches Und!), Andernfalls schlägt die Anforderung wahrscheinlich fehl. Stellen Sie außerdem sicher, dassuser
undpassword
die richtigen Schlüssel sind. Sie können die richtigen Schlüssel herausfinden, indem Sie den HTML-Code der Anmeldeseite durchsuchen (sehen Sie in der Funktion "Element überprüfen" Ihres Browsers nach und finden Sie dasname
Attribut in den Feldern "Benutzername" und "Kennwort").quelle
-p
(--page-requisites
) dafür nicht.--delete-after
zum ersten Abruf hinzuzufügen , damit Sie die Ergebnisseite nicht vor dem Anmelden speichern.WGET64: missing URL
Ich habe den gesamten Befehl wget in eine Zeile gesetzt und `\`Wenn Sie es einmal benötigen, können Sie sich über den Browser anmelden und anschließend die erforderlichen Header kopieren:
Verwenden Sie „Kopieren als curl“ auf der Registerkarte Netzwerk von Developer Tools (die Seite nach dem Öffnen neu laden) und curl Header Flagge ersetzen
-H
und--data
mit wget ist--header
und--post-data
.quelle
wget
mit dem richtigen Cookie nicht der Fall war. Ich vermute, der Webdienst sucht nach mehreren verschiedenen GET-Headern, auch nach scheinbar unwichtigen wie "User-Agent" oder "Cache-Control".wget
, dass die Daten falsch angegeben wurden.Ich habe direkt Cookies einer bestehenden Verbindung gegeben, um mit --no-cookies und dem Cookie-HTTP-Anforderungsheader zu wget. In meinem Fall war es ein Moodle-Universitäts-Login, bei dem das Anmelden komplexer aussieht (unter Verwendung mehrerer Anfragen mit einem Login-Ticket). Ich habe --post-data hinzugefügt, weil es eine POST-Anfrage war. Holen Sie sich beispielsweise die Liste aller Moodle-Benutzer:
wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php
quelle
Ich hatte das gleiche Problem. Meine Lösung bestand darin, mich über Chrome anzumelden und die Cookie-Daten in einer Textdatei zu speichern. Dies ist mit dieser Chrome-Erweiterung ganz einfach 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 Befehlszeile zum Kopieren und Einfügen wird Ihnen zur Verfügung gestellt.
quelle
Ich wollte einen Einzeiler, der keine Dateien herunterlädt. Hier ist ein Beispiel für das Weiterleiten der Cookie-Ausgabe an die nächste Anforderung. 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'
(Dies ist eine Zeile, obwohl sie wahrscheinlich in Ihrem Browser angezeigt wird.)Wenn Sie möchten, dass die Ausgabe in einer Datei gespeichert wird, wechseln Sie
-O -
zu-O /some/file/name
quelle
Sie benötigen keine cURL, um POST-Formulardaten zu erstellen.
--post-data 'key1=value1&key2=value2'
funktioniert gut. Hinweis: Sie können auch einen Dateinamen übergeben, um die POST-Daten in der Datei abzurufen.quelle
Wenn sie die Basisauthentifizierung verwenden:
Wenn sie POST-Formulardaten verwenden, müssen Sie stattdessen so etwas wie cURL verwenden.
quelle
Eine Lösung, die Luchs und Wget verwendet.
Hinweis: Lynx muss mit dem Flag --enable-persistent-cookies kompiliert worden sein, damit dies funktioniert
Wenn Sie mit wget eine Datei von einer Site herunterladen möchten, für die eine Anmeldung erforderlich ist, benötigen Sie lediglich eine Cookie-Datei. Um die Cookie-Datei zu generieren, wähle ich lynx. lynx ist ein Text-Webbrowser. Zuerst benötigen Sie eine Konfigurationsdatei für lynx, um Cookies zu speichern. Erstellen Sie eine Datei lynx.cfg. Schreiben Sie diese Konfiguration in die Datei.
Starten Sie dann lynx mit diesem Befehl:
Nachdem Sie den Benutzernamen und das Passwort eingegeben haben, wählen Sie "Mich auf diesem PC behalten" oder ähnliches. Wenn Sie sich erfolgreich anmelden, wird eine schöne Textwebseite der Website angezeigt. Und Sie melden sich ab. Im aktuellen Verzeichnis finden Sie eine Cookie-Datei mit dem Namen cookie.file. Das brauchen wir für wget.
Dann kann wget mit diesem Befehl Dateien von der Site herunterladen.
quelle
Beispiel zum Herunterladen eines großen Dateilinks mit wget auf den Server, den Sie in Ihrem Browser erhalten können.
Zum Beispiel mit Google Chrome.
Melden Sie sich an, wo Sie möchten, und klicken Sie auf Download. Gehen Sie zum Download und kopieren Sie Ihren Link.
Öffnen Sie dann DevTools auf einer Seite, auf der Sie sich anmelden, gehen Sie zur Konsole und holen Sie sich Ihre Cookies, indem Sie eingeben
document.cookie
Gehen Sie jetzt zum Server und laden Sie Ihre Datei herunter:
wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>
quelle