
Hallo!
Ich moechte gern "hoeherwertigen" Zugriff auf meine Bank- und Telefondaten online bekommen. An diese komme ich meist ueber https heran (in Python wohl ueber urllib2), aber ich habe mich noch nicht soweit darin vertieft, wie man da die Authentifizierung selbst vornimmt, ob man noch irgendein zusaetzliches SSL-Modul braucht, etc? Vielleicht hat jemand ja schon eigene Erfahrung in diesem Bereich gesammelt?
Danke/Gruss,
Dinu
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Ich moechte gern "hoeherwertigen" Zugriff auf meine Bank- und Telefondaten online bekommen. An diese komme ich meist ueber https heran (in Python wohl ueber urllib2), aber ich habe mich noch nicht soweit darin vertieft, wie man da die Authentifizierung selbst vornimmt, ob man noch irgendein zusaetzliches SSL-Modul braucht, etc? Vielleicht hat jemand ja schon eigene Erfahrung in diesem Bereich gesammelt?
Eine der grossen Vorteile von python ist die Möglichkeit solche Dinge "einfach so" auszuprobieren - Interpreter starten, urllib2 importieren und los gehts. Und wenn du Probleme hast, meld' dich nochmal. Diez
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Diez B. Roggisch:
Eine der grossen Vorteile von python ist die Möglichkeit solche Dinge "einfach so" auszuprobieren - Interpreter starten, urllib2 importieren und los gehts. Und wenn du Probleme hast, meld' dich nochmal.
Ein weiterer grosser Vorteil ist, dass man tief graben darf, um ganz einfache Dinge herauszubekommen, wie z.B. ob man nun mit urllib2 eine zertifikatbasierte Authorisierung vornehmen kann oder nicht?
Der Stand der zwei auf dieser Seite genannten SF-Bugs deutet fuer mich her darauf hin, dass es (noch?) nicht geht, oder?
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2003-10/ 3018.html
Und die offiziellen Beispiele sind da auch nicht allzu ergiebig, wenn ich mich nicht taeusche:
http://www.python.org/doc/current/lib/urllib2-examples.html
Gruss,
Dinu
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Dinu Gherman wrote:
Ich moechte gern "hoeherwertigen" Zugriff auf meine Bank- und Telefondaten online bekommen. An diese komme ich meist ueber https heran (in Python wohl ueber urllib2), aber ich habe mich noch nicht soweit darin vertieft, wie man da die Authentifizierung selbst vornimmt, ob man noch irgendein zusaetzliches SSL-Modul braucht, etc? Vielleicht hat jemand ja schon eigene Erfahrung in diesem Bereich gesammelt?
Das hängt ganz vom Service ab. Wenn man auf diesen Service mit Nutzername und Passwort zugreift, muss man das verwenden; wenn er X.509-Zertifikate verwendet, muss man die benutzen. Wenn es Passwörter sind, braucht man vielleicht Basic Authentification, vielleicht gibt es aber auch ein Login-Formular, woraufhin man dann ein Cookie erhält.
Für den Fall von Zertifikaten funktioniert folgender Code
import httplib
h = httplib.HTTPSConnection("localhost", key_file="key.pem", cert_file="cert.pem") h.connect() h.putrequest("GET", "/cgi-bin/env") h.endheaders()
r = h.getresponse() print r.read()
Ob Du da mit urllib draufzugreifen kannst, hängt ebenfalls vom Dienst ab; im Zweifelsfall würde ich immer httplib direkt verwenden.
Ein konkretes Beispiel:
https://ww2.homebanking-berlin.de/cgi/anfang.cgi/Berliner_Sparkasse
bringt ein Formular hoch, was man mit Kontonummer und PIN ausfüllen muss. Aus dem Quelltext der Seite geht hervor, dass man das ganze an
https://ww2.homebanking-berlin.de/cgi/login.cgi/Berliner_Sparkasse
per HTTP-POST senden soll. Die Konto-Nummer muss man dabei im Feld KtoNr und die PIN im Feld PIN absenden.
Dieses Scenario ist von urllib unterstützt; man schreibt dazu
x=urllib.urlopen("https://ww2.homebanking-berlin.de/cgi/login.cgi/Berliner_Sparkasse",
urllib.urlencode({'KtoNr':'12345','PIN':'4567'}))
Ich kann leider nicht ausprobieren, was da normalerweise zurückkommt; diese Anfrage produziert natürlich eine Fehlerseite.
Vermutlich sollte x.headers["Set-Cookie"] vorhanden sein, welches man dann im weiteren immer wieder mitsenden muss. Dazu kann man in 2.4 cookielib benutzen; alternativ unterstützt urllib2.HTTPCookieProcessor Cookies transparent. Den eigentlichen Inhalt der Seite bekommt man mit x.read().
Ciao, Martin
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Martin v. Löwis schrieb: [...]
vielleicht gibt es aber auch ein Login-Formular, woraufhin man dann ein Cookie erhält.
Für diesen Fall hat sich bei mir bestens ClientCookie bewährt (http://wwwsearch.sourceforge.net/ClientCookie) - auch über https, wie z.B. neuerdings beim Verkausfsmanager von Ebay.
Gruß, - bringi
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Martin v. Löwis:
Das hängt ganz vom Service ab. Wenn man auf diesen Service mit Nutzername und Passwort zugreift, muss man das verwenden; wenn er X.509-Zertifikate verwendet, muss man die benutzen. Wenn es Passwörter sind, braucht man vielleicht Basic Authentification, vielleicht gibt es aber auch ein Login-Formular, woraufhin man dann ein Cookie erhält.
Mit etwas Verspaetung neues zu dem Thema... Es kommt in der Tat stark auf die entsprechende Site an. Zertifizierung ist fuer mich im Moment doch noch kein Thema, weil es oftmals nicht oder nur als Option verfuegbar ist (z.B. Deutsche Bank ab Feb. 2005). Auf die Frage dazu bin ich nur gekommen, weil beim Schnueffeln nach TCP/IP-Paketen ich viel Kommunikation mit Verisign gesehen habe. Im Moment habe ich das aber voellig zurueckgestellt.
Aktuell favorisiere ich eine Loesung von John J Lee, der zwei Module namens clientcookie und clientform geschrieben hat. Nach einiger Kommunikation mit John kann ich nun immerhin an meine Vodafone-Rechnungs- und Verbindungsdaten kommen und sogar SMS schicken! Letzteres dank einer Wrapper-Klasse mit "fast keinem Code":
class SmsTest(unittest.TestCase): def test0(self): prefix, num = "0049172", "1234567" # fingiert msg = "test message" assert len(msg) <= 160
c = Connector() c.goto("https://www.vodafone.de/jsp/main/login/Login.jsp") c.fillForm(name="PRUGITKM", password="TZICJFMG") # fingiert server = "http://vodafoned2.annyway.net" path = "/aic?req=AicWebSMS.composeSMS&currComp=websms" c.goto(server + path) c.fillForm(precode=[prefix], recipientValue0=num, msgValue0=msg)
Wenn einen die Purschen nun auch noch internationale Vorwahl- nummern verwenden liessen, dann koennte man sich wieder mal ueberlegen, weiterhin bei dem Stall zu bleiben... Wie sieht es da anderswo aus?
Gruss,
Dinu
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (4)
-
"Martin v. Löwis"
-
Axel Bringenberg
-
Diez B. Roggisch
-
Dinu Gherman