Seite 1 von 1

automatisches einloggen mit python

Verfasst: Sonntag 9. Mai 2004, 15:37
von silvio
Hallo,

ich suche nach einem Weg sich via Python Programm
automatisch auf einer Webseite einzuloggen. Unterstehendes
Skript funktioniert so nicht.
Erste (Newbie)Frage wäre, was überhaupt ein realm ist.
Kann hierfür auch None bzw realm='None' angegeben werden?
Tipps und Information zum Erstellen solcher (Einlog-)Programme in Python
(Codeschnippsel ?) wären nett.

MfG

Silvio

Beispielskript

Code: Alles auswählen

import urllib2

# set up authentication info
authinfo = urllib2.HTTPBasicAuthHandler()
#authinfo.add_password( 'realm' , 'host', 'user', 'password')
authinfo.add_password( None, 'http://cgi.zdnet.de/forum/login.php', 'hans', 'harald')

#proxy_support = urllib2.ProxyHandler({"http" : "http://ahad-haam:3128"})

# build a new opener that adds authentication and caching FTP handlers
opener = urllib2.build_opener( authinfo, urllib2.CacheFTPHandler)

# install it
urllib2.install_opener(opener)

f = urllib2.urlopen('http://cgi.zdnet.de/forum/login.php')

print f.read()

Verfasst: Montag 10. Mai 2004, 13:22
von Beyond
Die von Dir verwendete Athentifikation ist für das HTML-Protokoll gemacht. Da das Internet heute von DAUs bevölkert wird, sind die schicken, grauen Login-Dialoge out. Stattdessen gibt's genau wie bei Deiner Seite HTML-Forms.

Du mußt die Login-Seite nach diesem Formular durchsuchen: form action="login"...
Dort ist auch eine Session-ID. Diese brauchst Du. Dann baust Du Dir selbst eine URL aus der Form-Action und dem User- und Passwort-Parameter. Diese kannst Du dann mit der Urllib öffnen ...

cu beyond

Danke

Verfasst: Montag 10. Mai 2004, 22:46
von silvio
Hi,

Danke für Deine schnelle Mail. Aber im Quelltext der von mir angegebenene Seite steht zum Beispiel
<form action="login.php" method="post" target="_top">.
Demnach müßte mit http://cgi.zdnet.de/forum/login.php?sid ... e58891a20b
der richige Host angegeben sein.
Könntest Du einem Newbie nochmal Hinweise für
die Variablenübergabe geben ?
(Codeschnipsel ?)

Danke nochmal

Silvio

Verfasst: Dienstag 11. Mai 2004, 17:40
von Beyond
Bei mir steht an der betreffenden Stelle:
<form action="login.php?sid=69c3b424550284d2f9222a9731cb7d0f" method="post" target="_top">

Also ist eine Session-ID (sid) dabei. Diese mußt Du bei jedem Login heraus-parsen.
Also mit

Code: Alles auswählen

s=urlopen ...
erstmal die Login-Seite laden d.h. Du bekommst einen String mit dem HTML und dann mit

Code: Alles auswählen

formstart= s.index('<form action="login.php?sid=')
herausfinden wo sich die interessanten Infos verbergen:

Code: Alles auswählen

mysid = s[formstart+len(''<form action="login.php?sid=''):-1]
Jetzt noch alles hinter der sid wegschneiden

Code: Alles auswählen

mysid = mysid[0:mysid.index('"')]
Nun hast Du die Login-Seite ausgewertet.
Wenn Du nun die URL
http://cgi.zdnet.de/forum/login.php?sid ... =*passwort*
öfnnest sollte es klappen.
Es ist halt ein Formular-GET anstatt -POST.

Mit Cookies können noch Probleme auftreten. u.u. wird nur eine sid angegeben, wenn keine Cookies akzeptiert werden.
Da mußt Du etwas rumprobieren.

cu beyond

Verfasst: Dienstag 11. Mai 2004, 19:24
von Milan
Beyond hat geschrieben:Wenn Du nun die URL
http://cgi.zdnet.de/forum/login.php?sid ... =*passwort*
öfnnest sollte es klappen.
Es ist halt ein Formular-GET anstatt -POST.
Hi. Mit der urllib geht natürlich auch eine POST Anfrage:

Code: Alles auswählen

s=urlopen("http://cgi.zdnet.de/forum/login.php","sid=*mysid*&username=*username*&password=*passwort*)
Du musst einfach nur den Querry String als Dataargument übergeben und Python sorgt für ein Post statt Get.

Milan