Einloggen mit Session-ID

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 5. Mai 2007, 01:27

Xabyt hat geschrieben: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?

Richtig.

Allerdings könntest du erwägen das von Gerold angesprochende mechanize und ClientForm zu verwenden. Meine Lösung ist eben eher "low-level", mit mechanize würden sich da sicher interessante Dinge machen lassen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Beitragvon Xabyt » Samstag 5. Mai 2007, 14:03

Ich schaue mir Gerolds Lösung nochmal an. Aber in dieser get_cookie Funktion, wo muss ich da die Namen der Cookies der Seite abändern und unter was für einer Variable, die ich dann abrufen kann und an das skript versenden muss, wird der Wert des Cookie gespeichert? Oder habe ich da was falsch verstanden?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 5. Mai 2007, 14:15

Xabyt hat geschrieben:Aber in dieser get_cookie Funktion, wo muss ich da die Namen der Cookies der Seite abändern und unter was für einer Variable, die ich dann abrufen kann und an das skript versenden muss, wird der Wert des Cookie gespeichert?

``get_cookie()`` liest einfach alle Cookies aus, die der Server per Set-Cookie-Direktive schickt (und in denen ein Bodenstrich ist) und gibt sie im Returnwert zurück. Das ist im Fall von phpBB ein Datacookie und ein SID-Cookie (siehe ``SignatureCanger.__init__()``, wo die Cookies ausgelesen werden und dann in ``self.returncookie`` verkettet werden).

Ich würde dir raten, den Quellcode einfach mal ausprobieren und mit einigen ``print``-Statements dir den aktuellen Inhalt der Variablen anzuzeigen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Beitragvon Xabyt » Samstag 5. Mai 2007, 15:09

Hallo,
Ich habe die Teile des Codes herausgenommen von denen ich dachte dass sie für meinen Bot, also für die Cookies notwendig sind. Nun wird aber immer folgender Fehler ausgegeben:
[code=]
Traceback (most recent call last):
File "C:\Python24\tubot.py", line 14, in -toplevel-
httpcookies = einbot1.headers['Set-Cookie']
File "C:\Python24\lib\rfc822.py", line 390, in __getitem__
return self.dict[name.lower()]
KeyError: 'set-cookie'
[/code]
Ich habe nun auch die urllib2 importiert, hier der betroffene Teil meines Codes:

Code: Alles auswählen

...
benutzer = "xabyt"
passwort = "***"
parameter1 = urllib.urlencode({'benutzer': benutzer, 'passwort': passwort, 'action': "Submit"})
einbot1 = urllib2.urlopen ("http://www.team-ulm.de/login.php", parameter1)
httpcookies = einbot1.headers['Set-Cookie']
httpcookies = httpcookies.split()
httpcookies = [cookie[:-1] for cookie in httpcookies if '_' in cookie]
...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 5. Mai 2007, 15:56

In denen Login-Parametern fehlt noch das Hidden-Field. Außerdem Musst du schauen, welche Header denn Überhaupt übermittelt wurden. In phpBB ist es so, dass man immer ein Cookie hat und dieses Cookie durch den Login zu einem authentifizierten Cookie gemacht wird. Du musst schauen wie das auf Team-Ulm gemacht wird.
Du solltest sowieso erstmal schauen, welche Header überhaupt geschickt werden. Werden Cookie-Header geschickt? Oder wird eine Fehlerseite ausgegeben weil der Login nicht geklappt hat?

Wenn man auf ``http://www.team-ulm.de/login.php`` geht, wird man auf ``http://www.team-ulm.de/login_no.php?mode=userdenied`` umgeleitet. Redirects sollte man vermeiden, da dabei die POST-Daten verloren gehen können.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Beitragvon Xabyt » Samstag 5. Mai 2007, 16:03

Die Seite "team-ulm.de/login.php" redirectet nur dann, wenn keine POST-daten vorhanden sind, denke ich. Welchen inhalt sollte denn besagtes hidden-field haben? Den des Cookies? Und wie überprüfe ich was die Header übermitteln?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 5. Mai 2007, 16:21

Xabyt hat geschrieben:Welchen inhalt sollte denn besagtes hidden-field haben?

Den gleichen den der Browser auch schicken würde. Welcher das ist, musst du in der Form schauen.

Xabyt hat geschrieben:Und wie überprüfe ich was die Header übermitteln?

Auf ``print einbot1.headers`` zu kommen ist wirklich nicht schwer, oder?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Beitragvon Xabyt » Samstag 5. Mai 2007, 16:46

Das hidden-feld hatte ich ja wirklich übersehen. es heißt "herkunft. Und entschuldigung, mit den headers das stimmt, aber ich dachte es wäre eine besondere, externe funktion. bei der Anweisung ``print einbot1.headers`` wird folgendes ausgegeben:
[code=]Date: Sat, 05 May 2007 15:41:26 GMT

Server: Apache/2.0.54 (Debian GNU/Linux)

Connection: close

Transfer-Encoding: chunked

Content-Type: text/html; charset=utf-8
[/code]
Was kann ich daraus schließen? Was bewirkt die Transfer-Encoding-Eigenschaft "chunked"?

Danke für deine Hilfe und deine Ausdauer speziell in meinem Fall.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 5. Mai 2007, 16:57

Xabyt hat geschrieben:[code=]Date: Sat, 05 May 2007 15:41:26 GMT

Server: Apache/2.0.54 (Debian GNU/Linux)

Connection: close

Transfer-Encoding: chunked

Content-Type: text/html; charset=utf-8[/code]
Was kann ich daraus schließen?

Das keine Cookies an den CLient geschickt werden. Entweder nutzt die seite keine Cookies oder das Login ist fehlgeschlagen. Du müsstest mal sehen was ``einbot1.read()`` für eine HTML-Seite ausspuckt. Ich tippe mal auf sowas wie "Falscher Benutzername/Passwort". Vielleicht liegt es aber auch am User-Agent, dass die Seite keine Robits einloggen lässt. Dann könntest du den User-Agent fälschen, aber sie dir bewusst, dass dies dann gegen die Benutzungsrichtlinien der Seite verstossen kann.

Xabyt hat geschrieben:Was bewirkt die Transfer-Encoding-Eigenschaft "chunked"?

Ist auf der Seite HTTP/1.1 Transfer-Encoding beschrieben. Ich denke nicht, dass du dich um das Transfer-Encoding kümmern musst.
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 » Samstag 5. Mai 2007, 17:19

Hallo!

Und so gehts mit "mechanize":

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import mechanize
import urllib


# Login
loginurl = "http://www.team-ulm.de/login.php"
logindata = urllib.urlencode(
    {
        "benutzer": "BENUTZER",
        "passwort": "PASSWORT",
        "herkunft": ""
    }
)
response = mechanize.urlopen(loginurl, logindata)
response.read() # wichtig

# Posteingang anzeigen
posteingangurl = "http://www.team-ulm.de/p_myprofile.php?show=inbox"
response = mechanize.urlopen(posteingangurl)

print response.read()

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 » Samstag 5. Mai 2007, 17:48

@ Gerold:
Ich glaube ich werde das auch mit dem Modul mechanize versuchen. Ich habe es mir bereits geladen, nur das Problem ist, ich bin in meinem Python-buch noch nicht beim Kapitel über modulare Programmierung, d.h. ich weiß nicht wie man ein solches Modul installiert. ich habe es bereits über die SETUP.py probiert, scheint aber nicht zu gehen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 5. Mai 2007, 17:51

Xabyt hat geschrieben:ich habe es bereits über die SETUP.py probiert, scheint aber nicht zu gehen.

``python setup.py install``
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Beitragvon Xabyt » Samstag 5. Mai 2007, 17:58

Ich glaube ich muss dich falsch verstanden haben, aber wenn ich in der Shell ``python C:\mechanize-0.1.6b\mechanize-0.1.6b\setup.py install``eingebe, so wird ein syntax error ausgegeben.

Gruß,
Felix
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Samstag 5. Mai 2007, 18:07

Xabyt hat geschrieben:``python C:\mechanize-0.1.6b\mechanize-0.1.6b\setup.py install``

Hallo Felix!

Schade, dass du uns die Fehlermeldung nicht mitgeteilt hast. Aber wahrscheinlich findet dein Windows den Python-Interpreter nicht.
Probier's mal so: ``C:\mechanize-0.1.6b\mechanize-0.1.6b\setup.py install``. Also ohne ``python``.

Du kannst den Pfad zu Python aber auch zum Systempfad hinzufügen. Wie das geht: [wiki]FAQ#WieStarteIchSkripte[/wiki]

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 5. Mai 2007, 18:11

Xabyt hat geschrieben:Ich glaube ich muss dich falsch verstanden haben, aber wenn ich in der Shell ``python C:\mechanize-0.1.6b\mechanize-0.1.6b\setup.py install``eingebe, so wird ein syntax error ausgegeben.

Hast du das wirklich in der Shell eingegeben oder im Python-Interpreter? (Und wenn du dich wunderst... es gibt Leute, die machen wirklich sowas)
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder