automatisches einloggen mit python

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
silvio
User
Beiträge: 2
Registriert: Samstag 8. Mai 2004, 14:23

automatisches einloggen mit python

Beitragvon silvio » Sonntag 9. Mai 2004, 15:37

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()
Benutzeravatar
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Beitragvon Beyond » Montag 10. Mai 2004, 13:22

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
silvio
User
Beiträge: 2
Registriert: Samstag 8. Mai 2004, 14:23

Danke

Beitragvon silvio » Montag 10. Mai 2004, 22:46

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
Benutzeravatar
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Beitragvon Beyond » Dienstag 11. Mai 2004, 17:40

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Dienstag 11. Mai 2004, 19:24

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder