Einloggen mit Session-ID

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
guter_hund
User
Beiträge: 19
Registriert: Montag 4. Dezember 2006, 13:25

Einloggen mit Session-ID

Beitragvon guter_hund » Freitag 2. März 2007, 08:48

Hi.

Habe mal wieder ein kleines Problem. Ich möchte mich mit meinem Script auf eine Website einloggen die Session-IDs benutzt und auf der selbigen auch Sachen mit meinem Account anderen etc.

Leider habe ich bis her nur eine sehr mühsehlige Methode, die sich den Quellcode der Seite, nach dem man manuel eingelogt hat, runterläd und in einer Textdatei speichert. Von da aus nutz das Script nur noch diese (und ggf. andere) Textdatei(en). :roll:


Vielleicht fällt einem eine bessere Variante ein. Währe nett. :oops:


MFG. Guter_Hund
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Freitag 2. März 2007, 09:23

Hi

Also entweder wird die Session-ID mit einem Cookie übergeben, dass kannst du mit Python auslesen oder die Session-ID wird an jeden Link angehängt, da müsstest du einfach die Seite nach einem Link mit Session-ID durchsuchen.

Gruss
Benutzeravatar
guter_hund
User
Beiträge: 19
Registriert: Montag 4. Dezember 2006, 13:25

Beitragvon guter_hund » Freitag 2. März 2007, 14:08

Es wird ein Session-Link benutzt.

[code=]
<frameset framespacing="0" border="0" cols="190,*" frameborder="0">
<frame name="Inhalt" target="Hauptframe" src="leftmenu.php?session=e29550f32433" noresize marginwidth="0" marginheight="0">
<frame name="Hauptframe" src="overview.php?session=e29550f32433&w=0&lgn=1" target="_blank">
<noframes>
<body>
<p>Diese Seite verwendet Frames. Frames werden von Ihrem Browser aber nicht
unterstützt.</p>

</noframes>
</frameset>
[/code]
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Freitag 2. März 2007, 14:20

Hi

Du musst etwa so vorgehen:
1. Schicke dem Server mit der urllib einen Request mit den Formulardaten (deine Anmeldedaten)
2. Suche in der Antwort vom Server nach "?sessionid=" und lies die Sessionid aus
3. Jeder Request von dir muss nun als GET-Parameter die Session-ID mitschicken.

Gruss
Benutzeravatar
guter_hund
User
Beiträge: 19
Registriert: Montag 4. Dezember 2006, 13:25

Beitragvon guter_hund » Freitag 2. März 2007, 14:24

:oops: :lol: :oops:
GET-Parameter? Kenn ich gar nicht. Währe super nett wenn du mir das, vielleicht auch mit code-aufbau, erläuterst.

MFG
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 2. März 2007, 14:40

such mal im Forum nach GET und POST...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Freitag 2. März 2007, 14:56

Und lies dir mal das HTTP-Protocol durch:http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol

Gruss
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Beitragvon Xabyt » Donnerstag 3. Mai 2007, 19:11

Hallo,
ich habe nun ein ähnliches Problem. Ich möchte mich mit einem Account einloggen (mein skript funktioniert bis dahin gut), nur speichert der Webdienst meinen Nick und mein Passwort in einer Session. Wie kann ich mein Pythonprogramm diese Session "auslesen" lassen und diese auf irgendeine Art speichern, damit nicht die Fehlermeldung kommt dass bei mir Sessions deaktiviert seinen und mein Programm unter dieser Session eingeloogt bleibt?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 3. Mai 2007, 21:27

Xabyt hat geschrieben:Wie kann ich mein Pythonprogramm diese Session "auslesen" lassen und diese auf irgendeine Art speichern, damit nicht die Fehlermeldung kommt dass bei mir Sessions deaktiviert seinen und mein Programm unter dieser Session eingeloogt bleibt?

Hängt ab, wie die Session gespeichert wird. Ich tipe mal darauf, dass die Session auf dem Server gespeichert wird und du ein Cookie bekommst, in dem die Session-ID hinterlagt ist. Dieses Cookie müsstest du also auslesen und bei jedem Request auf die Seitemitschicken.

Wie man mit Session-IDs in Cookies umgehen kann, siehst du in changesig.py, einem alten Programm von mir, welches phpBB-Signaturen modifiziert. Das Vorgehen ist analog, lediglich die Beschaffung des Cookies kann anders sein. Das hängt aber ab, ob du das Cookie vom Browser auslesen willst oder das Programm das Cookie direkt anfordern soll.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Beitragvon Xabyt » Freitag 4. Mai 2007, 11:45

Ich bin wie bereits erwähnt noch Anfänger, könntest du mir den Code ein wenig erläutern, oder ggf. die Adresse zu einer Erklärung/ einem Tutorial geben? Es handelt sich um einen Cookie, das ganze wird über PHP gemanaged. Nick und Passwort werden wie erwähnt darin gespeichert. Die Namen unter denen die Cookies gespeichert werden habe ich
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 4. Mai 2007, 16:00

Xabyt hat geschrieben:könntest du mir den Code ein wenig erläutern, oder ggf. die Adresse zu einer Erklärung/ einem Tutorial geben?

Naja, ein Python-Tutorial solltest du schon gelesen haben und optimalerweise verstanden haben.
An sich ist der Code ziemlich einfach (und wenn ich so bedenke auch gar nicht so besonders gut. Immerhin funktioniert er), daher wäre es mir lieber wenn du konkrete Fragen stellst - so muss ich nicht Sachen erklären die du sowieso schon weißt. Also wenn du konkrete Fragen hast - schiess los, ich antworte gerne.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Beitragvon Xabyt » Freitag 4. Mai 2007, 18:15

Leonidas hat geschrieben: Also wenn du konkrete Fragen hast - schiess los, ich antworte gerne.


Hallo,
Also:
Für was ist das Modul "BeautifulSoup" zuständig?
Welche Funktion dieses Skriptes ist für direkte Speicherungen des/eines Cookies verantwortlich? D.h. sowas wie Cookie = addCookie("soheisstdercookie", "So soll sein Ihnalt sein")?
Wie schicke ich dem Server die Cookies so, dass er denkt, dass ich mich eingeloggt hätte? D.h. sowas wie CookieSenden = encodecookie(Cookie)
und das man "CookieSenden" dann an das Skript sendet, so mein ich das.

Dein Skript ist sehr spezialisiert auf das Phpbb, deshalb kann ich das ehrlich gesagt nicht gut ordnen, dazu kommt dass ich Py seit ca. 5 Tagen lerne, danke für jegliche Hilfe.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 4. Mai 2007, 18:26

Xabyt hat geschrieben:Für was ist das Modul "BeautifulSoup" zuständig?

Fürs HTML-Scraping. Würde zwar auch "von Hand" gehen, aber BeautifulSoup macht es einfach viel einfacher und angenehmer.

Xabyt hat geschrieben:Welche Funktion dieses Skriptes ist für direkte Speicherungen des/eines Cookies verantwortlich? D.h. sowas wie Cookie = addCookie("soheisstdercookie", "So soll sein Ihnalt sein")?

Gespeichert wird der Inhalt des Cookies im Arbeitsspeicher. Und das Cookie an den Request zu hängen ist in der Zeile

Code: Alles auswählen

req.add_header('Cookie', self.returncookie)


Xabyt hat geschrieben:Wie schicke ich dem Server die Cookies so, dass er denkt, dass ich mich eingeloggt hätte? D.h. sowas wie CookieSenden = encodecookie(Cookie)
und das man "CookieSenden" dann an das Skript sendet, so mein ich das.

So wie in der Funktion ``change``.

Xabyt hat geschrieben:Dein Skript ist sehr spezialisiert auf das Phpbb, deshalb kann ich das ehrlich gesagt nicht gut ordnen, dazu kommt dass ich Py seit ca. 5 Tagen lerne, danke für jegliche Hilfe.

Es ist spezialisiert auf phpBB, aber das Konzept Cookie auslesen, Cookie bei Requests mitsenden ist sehr allgemein.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 4. Mai 2007, 18:29

Xabyt hat geschrieben:dazu kommt dass ich Py seit ca. 5 Tagen lerne

Hi Xabyt!

Du suchst dir ja auch nicht unbedingt ein einfaches Thema für den Beginn aus. Webprogrammierung ist eine Sache für sich. Es genügt nicht, nur Python zu verstehen, man muss auch das Web und die darin eingesetzten Techniken verstehen. HTTP, GET, POST, <form>, CGI, RESPONSE, REQUEST, usw.

Wenn ich mich irgendwo im Web anmelden muss, bevor ich zu den gesuchten Informationen komme, dann nehme ich meistens
http://wwwsearch.sourceforge.net/ClientCookie/
oder
http://wwwsearch.sourceforge.net/ClientForm/

ClientCookie ist jetzt in http://wwwsearch.sourceforge.net/mechanize/ integriert worden. Wie genau, weiß ich nicht, da ich mechanize noch nie eingesetzt habe. Es ist schon länger her, dass ich ClientCookie angewendet habe.

Wie auch immer. ClientCookie merkt sich die Cookies automatisch, die vom Server geschickt wurden und gibt diese bei jeder weiteren Anfrage an den Server automatisch an diesen zurück. Jetzt musst du nur zuerst die Seite aufrufen, mit der du dich anmelden kannst. Findest raus, wie die Anfrage an den Server lauten muss, damit du angemeldet bist und nachdem du dich angemeldet hast, kannst du jeden URL der Website aufrufen, ohne dich wieder anmelden zu müssen.

Du musst einfach ein bischen probieren und den Quellcode der Anmeldeseite studieren. Die Kombination von ClientCookie und ClientForm ist noch produktiver. Mit ClientForm findest du sehr schnell Formularfelder raus. Du könntest sie damit sogar "virtuell" ausfüllen und den daraus resultierenden Request wieder an den Server schicken. Usw.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Beitragvon Xabyt » Freitag 4. Mai 2007, 19:26

@Gerold: Ich programmiere seit 2 Jahren in PHP und habe auch in Webdesign gut Erfahrungen. Ich weiß was GET (in PHP $_GET[]) und die anderen Requests sind, habe mit MySQL programmiert und auch in Dingen wie AJAX (ein wenig) Erfahrung. Ein absoluter Anfänger bin ich demnach nicht, nur möchte ich jetzt in Python einsteigen und mit einer solchen Art der Programmierung wurde ich bisher noch nicht konfrontiert.

@Leonidas:
Also ist der Teil, in dem dann die Daten meines Cookies gespeichert werden, also der Teil den ich um die Daten meines Cookies umändern muss folgender?

Code: Alles auswählen

    def get_cookie(self):
        # open the loginpage
        http = urllib2.urlopen(self.loginpage)
        # read the contents of Set-Cookie
        httpcookies = http.headers['Set-Cookie']
        # close the connection
        http.close()

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]