Loginprobleme, Post, mechanize

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
fantasy
User
Beiträge: 3
Registriert: Dienstag 29. Mai 2012, 15:01

Moin ich versuche mich schon länger bei einer Webseite mit mechanize anzumelden um mein Verständnis von mechanize und der Webprogrammierung mit Python generell zu festigen.

Es handelt sich um folgende Seite:
http://www.die-staemme.de/

Wenn man sich registriert hat, kann man sich anmelden, indem man zuerst die logininformationen eingibt und später den gewünschten Server auswählt.

Dies funktioniert mit 2 Post-Anfragen, bei einem Account mit dem usernamen "dada", dem passwort "passwort" und dem Server 82 sieht das so aus (Live HTTP headers):

Code: Alles auswählen

http://www.die-staemme.de/index.php?action=login&server_list=1&show_server_selection=1

POST /index.php?action=login&server_list=1&show_server_selection=1 HTTP/1.1
Host: http://www.die-staemme.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://www.die-staemme.de/index.php
Content-Length: 60
Pragma: no-cache
Cache-Control: no-cache
user=dada&password=passwort&cookie=false&clear=true
HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.3-7+squeeze8
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Date: Tue, 29 May 2012 14:23:35 GMT
Server: lighttpd/1.4.28
----------------------------------------------------------
http://cdn.tribalwars.net/graphic/world.png

GET /graphic/world.png HTTP/1.1
Host: cdn.tribalwars.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Referer: http://www.die-staemme.de/merged/index.css?1338296463

HTTP/1.1 200 OK
Date: Tue, 29 May 2012 14:23:35 GMT
Expires: Sat, 09 Jun 2012 14:18:16 GMT
Last-Modified: Thu, 26 Apr 2012 13:47:14 GMT
Cache-Control: max-age=1209600
Content-Type: image/png
Etag: "1139726570"
Accept-Ranges: bytes
Server: lighttpd/1.4.28
Content-Length: 1470
----------------------------------------------------------
http://www.die-staemme.de/index.php?action=login&server_de82

POST /index.php?action=login&server_de82 HTTP/1.1
Host: http://www.die-staemme.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Referer: http://www.die-staemme.de/index.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 68
user=dada&password=16c42d7284d1883741ac10460690935fbe1970a7
HTTP/1.1 302 Found
X-Powered-By: PHP/5.3.3-7+squeeze8
Location: http://de82.die-staemme.de/login.php?sid=35ecfa704933&secret=0&mobile_no_force=0
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Date: Tue, 29 May 2012 14:23:37 GMT
Server: lighttpd/1.4.28
Ich habe mich versucht einzuloggen, scheiterte aber kläglich.

Meine Versuche gingen in etwa in diese Richtung:

Code: Alles auswählen

import mechanize
data1 = '''POST /index.php?action=login&server_list=1&show_server_selection=1 HTTP/1.1
Host: http://www.die-staemme.de
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 51

user=dada&password=passwort&cookie=false&clear=true'''

data2 = '''POST /index.php?action=login&server_de82 HTTP/1.1
Host: http://www.die-staemme.de
User-Agent: Mozilla/5.0
Content-Length: 59

user=dada&password=16c42d7284d1883741ac10460690935fbe1970a7'''


br = mechanize.Browser(factory=mechanize.RobustFactory())
br.set_handle_robots(False)
br.open('http://www.die-staemme.de')
br.open('http://www.die-staemme.de/index.php?action=login&server_de82', data1) #br.open("url", postrequest)
br.open('http://www.die-staemme.de/index.php?action=login&server_de82', data2)
So etwas in diese Richtung funktioniert aber offensichtlich nicht. Ist mein Ansatz generell falsch? Habe ich das POST protocol einfach nicht verstanden?
Ich bin noch ziemlich unerfahren mit Python und webprogrammierung im Allgemeinen, weiss irgendjemand von den erfahreneren Usern hier weiter?

Freue mich auf jede Hilfe.
Zuletzt geändert von fantasy am Samstag 26. Januar 2013, 20:58, insgesamt 1-mal geändert.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Warum gehst du dein Problem so an wie du es tust?

Auch mit dem Python Lib urllib baust du dir keine Post Request per Text.


Hier ein Bsp. aus der mechanize Bibliothek:

Code: Alles auswählen

    browser = mechanize.Browser(factory=mechanize.RobustFactory())
    browser.set_handle_robots(False)

    browser.open("http://pypi.python.org/pypi")
    browser.follow_link(text="Package Index", nr=0)
    browser.select_form(name="searchform")
    browser.form["term"] = "mechanize"
    browser.submit()
fantasy
User
Beiträge: 3
Registriert: Dienstag 29. Mai 2012, 15:01

Danke habs jetzt geschafft :D
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich denke das was du machst verstößt gegen die AGB des Betreibers, genauer §10.1 und womöglich §10.3.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
fantasy
User
Beiträge: 3
Registriert: Dienstag 29. Mai 2012, 15:01

Danke für den Hinweis.
Das ganze dient nur Übungszwecken. Ich beachte die AGBs.
Antworten