Einloggen mit Session-ID

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

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 (former) Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

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: Alles auswählen

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'
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]
...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

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: Alles auswählen

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
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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Xabyt hat geschrieben:

Code: Alles auswählen

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
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 (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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

@ 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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

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: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Es geht aber noch viel einfacher:

Installiere dir mit "ez_setup.py" das Programm "easy_install.exe".
http://peak.telecommunity.com/DevCenter ... sy-install

Wenn "easy_install.exe" im Pfad ist, dann brauchst du nur mehr das hier eingeben:

Code: Alles auswählen

easy_install mechanize
Damit wird dir "mechanize" installiert.

Wenn easy_install nicht im Pfad ist, dann musst du natürlich den ganzen Pfad zum Programm mit angeben:

Code: Alles auswählen

C:\Python25\Scripts\easy_install.exe mechanize
Es rentiert sich, ``C:\Python25\Scripts\`` im Pfad zu haben. Auch für später.

Mit easy_install kannst du sehr viele Python-Module installieren. Welche das sind, siehst du hier: http://python.org/pypi
Alle Module, für die es eine "*.egg"-Datei gibt, lassen sich damit installieren.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

gerold hat geschrieben:Alle Module, für die es eine "*.egg"-Datei gibt, lassen sich damit installieren.
Nein, es ist sogar noch besser. easy_install kann jegliche Art von Tarballs in denen es Distutils-Skripte gibt automatisch runterladen, entpacken, zu Eggs bauen und dann installieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Hallo,
es wird folgende Fehlermeldung ausgegeben:

Code: Alles auswählen

>>> C:\mechanize-0.1.6b\mechanize-0.1.6b\setup.py install
SyntaxError: invalid syntax
Der Doppelpunkt wird rot hinterlegt.
Woran kann das liegen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Xabyt hat geschrieben:Woran kann das liegen?
Du gibt den Code in den Python-Interpreter ein (so wie ich es schon vermutet habe). Dieser versucht das natürlich als Python-Quelltext zu verarbeiten, was nicht funktioniert. Du musst es in der Shell (Eingabeaufforderung eingeben), also das Ding wo man Shellbefehle absetzt. Das wo der Python-Interpreter normalerweise mit dem Aufruf ``python`` gestartet wird.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Das ist mir ja ein wenig peinlich, nur ist es irreführend, dass diese Anwendung doch als "Python Shell" bezeichnet wird. Diese Anwendung wird in meinem Buch als Python-Shell bezeichnet. Ich starte diese vermeintlich shell über die IDLE, aber in der Taskleiste wird sie als Python Shell bezeichnet. Ich finde die richtige Shell nicht!
Antworten