Nach Anmeldung kommt Abmeldung [Modul: requests]

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo Leute,

ich bin in der Lage mich mittels Modul requests auf einem Portal anzumelden. Aber wie kann ich mich wieder erfolgreich abmelden?

Code: Alles auswählen

import requests
import sys
import time

# Fill in your details here to be posted to the login form.
payload = {
    'username': 'test_user',
    'password': 'test_password'
}
url = 'http://www.metalflirt.de/community/login'

# Use 'with' to ensure the session context is closed after use.
# Session used to handle cookies
with requests.Session() as c:
    # here is the login URL, and the data we want to submit
    c.post(url, data=payload)
    
    # An authorised request.
    # test it by accessing hidden page
    r = c.get('http://www.metalflirt.de/community/moshpit')
    
    # Here it will tests the login, to make sure
    # we already logged in into the system
    log_status = payload["username"] in r.content
    print log_status
    print 'cookies befor clearing', requests.utils.dict_from_cookiejar(c.cookies)
    c.cookies.clear()
    print 'cookies after clearing', requests.utils.dict_from_cookiejar(c.cookies)
    if log_status == True:
        time.sleep(5)
        c.get('http://www.metalflirt.de/community/logout')
        print r.content
    else:
        print r.content
In Zeile 24 wird im Inhalt (content) geschaut, ob der Benutzername nach dem Login zu finden ist. Oftmals werden bei einige Portale der eigene Benutzername nochmal angezeigt, zum Beispiel in Form einer Begrüßung wie: "Hallo USERNAME, schön, dass du wieder da bist.". Und das Ergebnis wird dann in Form von True oder False in die Variable log_status gespeichert. Ist der Rückgabewert True, dann wird in Zeile 31 fünf Sekunden gewartet, und anschließend wird dann GET gesendet, und hier wird der Logout-Link angegeben. Ich ging davon aus, dass somit die aktuelle Sitzung (hier ist die Sitzung in c gespeichert) beendet. Fehlanzeige. Mein Nickname ist immer noch online. Die fünf Sekunden nahm ich deshalb zum Anlass, weil ich dachte, dass der Webserver nicht gleich mehrere Anfragen annehmen kann, und somit eine Zeit braucht. Gibt es eine Möglichkeit sich erfolgreich vom Webserver abzumelden?
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Was passiert, wenn du die Zeile mit `cookies.clear()` weglässt bzw auskommentierst?

Und noch was: Einige Portale mögen keine Bots und verbieten daher die Nutzung solcher Skripte. Du solltest also abgeklärt haben, ob die Nutzung deines Skripts erlaubt ist. Ansonsten dürfte es früher oder später Ärger (in welcher Form auch immer) für dich geben.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@snafu: Deine Vermutung bzw. Anmerkung war richtig. Hier musste das c.cookies.clear() auskommentiert werden. Vielen Dank.

Und zu deiner Anmerkung. Ich verstehe dich voll und ganz. Da aber dieses Skript nur beispielhaft auf eine Plattform zugreift, muss ich mich nicht jedesmal für irgendwelche Tests melden, oder? Denn ich will kein Bot oder dergleichen schreiben, um MetalFlirt.de anzugreifen. Hätte ich das vor, wär ich ja kaum so dumm, und würde das hier öffentlich machen. MetalFlirt.de diente hier nur als Beispiel. Ich hätte auch dieses Forum nehmen können.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bots müssen nicht per se bösartig sein. Auch wenn du z.B. nur irgendwelche Infos regelmäßig abfragen möchtest, dann nutzt du streng genommen eine Art von Bot. Mit "Bot" ist in diesem Fall generell ein Programm gemeint, welches irgendetwas automatisiert (und in der Regel als Client) mit einer Webseite anstellt. Auf einigen Portalen sind halt auch "gutartige" Bots verboten. Meistens findet man dazu eine entsprechende Erwähnung in den AGBs des Portals.

Aber ich will hier auch kein Fass aufmachen. Die Entscheidung, es zu tun oder es zu lassen, liegt ja bei jedem selbst.
BlackJack

Neben den AGBs gibt's natürlich auch noch die robots.txt.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

snafu hat geschrieben:Bots müssen nicht per se bösartig sein. Auch wenn du z.B. nur irgendwelche Infos regelmäßig abfragen möchtest, dann nutzt du streng genommen eine Art von Bot.
Der wichtige Punkt ist: Nicht du als Bot-Benutzer entscheidet was "boesartig" ist, sondern der Seitenbetreiber.
Und spaetestens wenn der "gutartige" Bot der eigentlich stuendlich Daten abfragen sollte wegen einem Fehler jede Mikrosekunde fragt, ist das auch objektiv eine (versuchte) DoS Attacke.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@cofi: Dann ersetze ich "gutartige Bots" durch "gutgemeinte Bots". ;)
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Mal angenommen, ein Portal will nicht, dass man ein Programm schreibt, welches sich automatisiert irgendwo anmeldet und Information holt, dann hätte der Betreiber schon einen Riegel vorgeschoben, eine Art CAPTCHER oder? Ich kenne Bots eher im Zusammenhang von Chats. Meine erste Erfahrung machte ich mit den IRC-Chats, denn dort sind meistens Bots unterwegs. Aber wenn man es ganz genau nimmt, müsste man eigentlich vor dem Einsatz des Moduls requests erst einmal eine Erlaubnis einholen, dass man dieses Modul anwenden kann. Denn requests wäre erst sinnvoll, wenn es auch eine Aufgabe hat, und diese liegt ja nun mal daran mit dem Webserver zu kommunizieren.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Nur muss man eben unterscheiden zwischen vorgesehenen und nicht vorgesehenen Kommunikationswegen. Es gibt abhängig von der Webseite ja auch alternative Möglichkeiten, um bestimmte Inhalte automatisiert abzurufen, z.B. über spezielle XML- oder JSON-APIs. Das wären jetzt Beispiele, wo man das `requests`-Modul sinnvoll und auch ohne Bauchschmerzen benutzen könnte.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Sophus hat geschrieben:Mal angenommen, ein Portal will nicht, dass man ein Programm schreibt, welches sich automatisiert irgendwo anmeldet und Information holt, dann hätte der Betreiber schon einen Riegel vorgeschoben, eine Art CAPTCHER oder?
Ich würde nicht davon ausgehen, nur weil kein CAPTCHA vorhanden ist, dürfte ich fleißig Bots losschicken.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Sophus hat geschrieben:Mal angenommen, ein Portal will nicht, dass man ein Programm schreibt, welches sich automatisiert irgendwo anmeldet und Information holt, dann hätte der Betreiber schon einen Riegel vorgeschoben, eine Art CAPTCHER oder?
Klassischer Fall von "duerfen" vs. "koennen". Nur weil du ein Auto fahren kannst, heisst noch nicht, dass du es darfst.
Noch dazu wuerde man das CAPTCHA auch jedem _menschlichen_ Benutzer zumuten. Bei mir ist es schon ne weile her, dass ich eines auf den ersten Versuch geschafft habe ...
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Naja hier muss man doch etwas relativieren - Bots schreiben, in Umlauf bringen, betreiben ist per se nicht strafbar. In Deutschland gäbe es strafrechtlich nur einen Hebel, dagegen vorzugehen: Computersabotage (z.B. wenn ein Bot klar auf DOS abzielt oder Exploits ausnutzt). Alles andere ist erstmal ok und Zuständigkeit des Betreibers (er muss die Plattform hinreichend performant und sicher aufstellen).

Zivilrechtlich siehts etwas anders aus, hier kann der Betreiber durchaus Regelungen festlegen, welche einzuhalten sind und mit Entzug der Leistung bei Nichteinhalten drohen (z.B. Accountsperrung). Ob die Regeln ok sind, ist wieder eine andere Frage (Botregelungen sind akzeptiert, Regelungen zur Haarfarbe von Benutzern wären ungültig). Ob ein Verstoß weitreichende Konsequenzen für z.B. Botnutzer hat, ist wiederum Ermessensssache. So müsste z.B. die Betreiberseite einen Schaden vorzeigen können, damit ein Gericht das aufgreift.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

An Gerichte dachte ich jetzt eher weniger, sondern eher daran, dass der Account - gerade weil es ja auch um die An- & Abmeldung geht - gesperrt wird.
Aber ich glaube jetzt haben wir alles abgedeckt :)
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo Leute,

mein Anliegen liegt viel mehr darin (und ich denke, dass ist euch sehr wohl aufgefallen), dass vor habe eine Kundenseite einzurichten. Oder anders formuliert, dass ich mir zum Fernziel gesetzt habe, später einmal eine Kundenseite zu betreiben. Natürlich kenne ich mich im Bereich Web-Entwicklung nicht aus, und muss mir selbstverständlich jemanden suchen, der sich damit auskennt. Mir geht es also darum, dass sich der Kunde, der meine kostenlose Software benutzt, über die Software ein Konto einrichten kann, und darüber sozusagen bestimmte Dienste buchen kann. Damit bestimmte Zusatzfunktionen bei der Software freigeschalten werden, soll sich der Benutzer/Kunde über die GUI auf meiner Kundenseite kurz anmelden, Informationen holen, und dann wieder abmelden. Wie gesagt, diese Idee ist noch ein Fernziel.

Demzufolge brauche ich keinem zu fragen, ob ich diese An- und Abmelde-Funktion anwenden darf. Oder müsste ich einem Web-Hoster danach fragen? Wobei ich mir denke, dass es denen relativ egal ist. Denn auf deren Seite sind die meisten Zugriffe auf höchstem Niveau gesichert. Da kann so ein einfacher Skript wie der hier wohl kaum eine Web-Host-Firma wie Host Europe in die Knie zwingen?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

So siehts mal wieder ganz anders aus :)

In dem Falle bist du der fragliche Betreiber und kannst dich gleich selbst um Erlaubnis bitten ;)
Host Europe wirst du damit vielleicht nicht in die Knie zwingen, aber je nachdem was du bei denen eingekauft hast koennen es zu viele Anfragen fuer dich sein.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@cofi: Mal vorweg: Die Zugriffe, die auf einen Webserver donnern gehen vom PHP aus- oder mit was man auch seine Web-Seite gestaltet. Denn wenn ich mich hier im diesem Forum manuell, ohne mein Programm, ständig ab- und anmelde, wird vom PHP-Skript ausgeführt. Ich greife also nicht direkt auf den Web-Server zu. Und so ist es mit dem Skript den ich hier vorgestellt habe. Wenn ein Anbieter bei einigen Zugriffen schon die Nase voll haben, dann stimmt da etwas nicht. Wie wäre es mit einer viel besuchten Seite. Ein Forum mit x-Tausende Mitglieder pro Stunde, die sich ab- und anmelden? Dann wäre ja der Vorgang per se schon als ein DDoS-Angriff zu klassifizieren.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mit derselben IP ständig an- und abmelden ist die Art von auffälligen Verhalten die sehr schnell dazu führt dass du geblockt wirst.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Dann sollte ich aufpassen, dass ich mich hier im Forum nicht zu oft an. und abmelde :-)
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@ Sophus: wenn Du selbst den Server gestaltest, ist es am besten, mit Deinem Skript nicht über eine normale Anmeldeseite zu gehen, sondern eine REST-API anzubieten.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@Sirius3: Aus welchem Grund? Ich muss gestehen, dass ich bis dato noch nie was von RESt-API gehört habe.
Antworten