Wie kann ich ein Befehlszeilentool wie Wget verwenden, um mich bei einer OpenID-Site anzumelden?

10

Insbesondere möchte ich in der Lage sein, bestimmte Seiten von meinem Benutzerprofil auf den verschiedenen Stack Exchange-Sites herunterzuladen. Ich möchte dies jedoch automatisch (mithilfe eines cronJobs) über die Befehlszeile und in einem analysierbaren Format tun. Ich bevorzuge die Verwendung von Linux, könnte aber bei Bedarf auch auf einen Mac- oder Windows-Computer zugreifen.

Idealerweise würde ich gerne ein Tool wie Wget oder cURL verwenden , um die Seiten abzurufen. Ich weiß aber nicht, wie ich am Login vorbeikomme. Ich habe Vorschläge gesehen, die erwähnen, dass Sie sich über Firefox anmelden, das entsprechende Cookie exportieren und es über seine --load-cookiesOption in Wget importieren können . Zum Beispiel hier und hier . Dies funktioniert zwar, wenn ich mich gerade angemeldet habe, aber nach einer Weile nicht mehr. Ich denke, weil der ID-Token aktualisiert werden muss.

Nachdem ich mich bei SU angemeldet und meine Cookies exportiert habe, kann ich Folgendes tun:

wget --load-cookies cookies.txt \
  https://superuser.com/users/151431/terdon?tab=responses

Nach ein paar Minuten bekomme ich einen 404-Fehler:

wget -O ~/stack/$(date +%s) --load-cookies ~/cookies.txt \
   https://superuser.com/users/151431/terdon?tab=responses

--2013-08-06 04:04:14--  https://superuser.com/users/151431/terdon?tab=responses
Resolving superuser.com (superuser.com)... 198.252.206.16
Connecting to superuser.com (superuser.com)|198.252.206.16|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-08-06 04:04:15 ERROR 404: Not Found.

Wie kann ich mich automatisch über die Befehlszeile bei einer OpenID-fähigen Website anmelden?


PS. Ich denke, dies ist hier besser geeignet als in Webanwendungen, da meine Frage wirklich den Kommandozeilenaspekt und nicht die tatsächlichen Details der fraglichen Webseite betrifft. Ich würde vermuten, dass jede Lösung für alle OpenID- Sites gelten wird.

terdon
quelle
3
Haben Sie in der SE-API ( api.stackexchange.com ) nachgesehen , ob sie die gesuchten Informationen enthält? Dies ist der offizielle Weg, um programmgesteuert auf die Daten zuzugreifen. Zur Authentifizierung wird OAuth verwendet.
Heavyd
@heavyd Ja, ich hatte gehofft, dass ich mich dafür nicht mit der API befassen muss. Wenn das der einzige Weg ist, denke ich, muss ich. Auf den ersten Blick scheint es jedoch nicht so, als ob ich den Anmeldevorgang über die API automatisieren könnte. Wissen Sie, ob ich mich auf eine Weise authentifizieren kann, die keine aktiven Eingaben von mir erfordert? Wenn ich die Dokumente richtig verstehe, um Daten zu erhalten, die eine Authentifizierung erfordern, muss ich mich manuell anmelden.
terdon
Ich habe die SE-API nicht verwendet, aber in anderen OAuth-Implementierungen haben Sie sich einmal angemeldet, und Sie erhalten ein Token, das auf unbestimmte Zeit gültig ist.
HeavyD

Antworten:

1

Sie können nicht, weil Cookies von Zeit zu Zeit aktualisiert werden. Dies dient Sicherheitszwecken. Sie können dies nur so tun, wie Sie es bereits getan haben. zumindest nach meinem Verständnis.

Maarten
quelle
Ich habe gerade gesehen, dass dies eine sehr alte Frage ist ... Ups.
Maarten
-3

Lesen Sie die Manpage nach wgetund lesen Sie die Beschreibungen der Flags --userund --password.

Beachten Sie, dass die Übergabe eines Kennworts als Befehlszeilenargument nicht empfohlen wird, da jeder, der pses ausführt, es sehen kann. Die beste Vorgehensweise besteht darin, keine unformatierten Kennwörter zu speichern. Die nächstbeste Vorgehensweise besteht darin, sie in einer Datei abzulegen, die nur der Eigentümer lesen kann.

Jeff N
quelle
3
Die von Ihnen erwähnten Flags sind für die HTTP-basierte Authentifizierung (Basic, Digest usw.). SE verwendet keines davon zur Authentifizierung. Sie verlassen sich für die Authentifizierung auf einen OpenID- Anbieter eines Drittanbieters .
Heavyd