Seite Parameter übergeben

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Hallo,

Ich habe folgendes Problem:

Man kann ja einem Server bestimmte Parameter übergeben z.b

http://www.site.de/index.php/?action=lo ... r=username

Das klappte auch bei MonstersGame, einen Browsergame wunderbar, bis das letzte große Update kam. Mein Lesezeichen das die Seite direkt so aufruft und mich einloggt funktioniert jetzt nicht mehr. Genauso funktioniert mechanize jetzt auch nicht mehr:

Code: Alles auswählen

mechanize.urlopen(url, logindata)
logindata war bisher immer mit:

Code: Alles auswählen

logindata = urllib.urlencode(
    {
        'ac': 'login',
        'user': 'user',
        'password:' 'password',
        'gfxpack': 1
    }
)
und wenn man urlopen so aufruft macht es ja auch nichts anderes als:
Der alte code der seite sah so aus:
http://paste.pocoo.org/show/52318/

oder nur der wichtige Teil der alten Seite:
http://paste.pocoo.org/show/52319/

Dort werden mittels:
<input class="input" type="text" name="user" size="30" MAXLENGTH="30">

<input class="input" type="password" name="password" size="20" MAXLENGTH="20">

<input type="checkbox" name="gfxpack" value="1">
Die Daten übergeben. Demnach einfach so aufrufen:
/index.php?ac=login&user=lol&password=lol&gfxpack=1
und man war eingeloggt.

Beim neuen siehts etwas anders aus:

Neuer code:
http://paste.pocoo.org/show/52320/

Wichtiger teil des neuen Codes:
http://paste.pocoo.org/show/52321/

Also:
<input class="input" type="text" name="user" size="30" maxlength="30" /> - Username

<input class="input" type="password" name="password" size="20" maxlength="20" /> - Passwort

<input type="checkbox" name="gfxpack" value="1" style="background:none;" /> - gfxpack
Denmach eigentlich ja auch so:
/index.php?ac=loginpage&user=lol&password=lol&gfxpack=1
Das geht jetzt aber merkwürdigerweise nicht mehr - man bleibt einfach auf der gleichen Seite ohne das irgendetwas passiert. Es geht nur wenn man auf den Login Button drückt.

Ich habe mal einen Sniffer mitlaufen lassen da werden noch zusätzlich x und y Koordinaten übergeben an der Stelle an der man geklickt hat, aber daran kanns nicht liegen, oder?:
POST /index.php?ac=loginpage HTTP/1.1
Host: spielwelt21.monstersgame.net
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9) Gecko/2008051206 Firefox/3.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://spielwelt21.monstersgame.net/?ac=loginpage
Cookie: GAMESESSID=15c44e95ab9a8a94733080a3de694c71
Content-Type: application/x-www-form-urlencoded
Content-Length: 121

server=http%3A%2F%2Fspielwelt21.monstersgame.net%2F%3Fac%3Dloginpage&user=lol&password=lol&gfxpack=1&x=169&y=33
MfG,
CracKPod

Wäre toll wenn mir (mal wieder) jemand helfen könnte.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Das ``POST`` ist der Unterschied. Einfach `logindata` als zweiten Parameter von `urllib.urlopen` übergeben und nicht an die URL anhängen. Und dich vllt mal mit dem HTT-Protokoll beschäftigen.

Edit: Okay, das war vorher schon POST. Wenn das mit GET-Parametern ging, lässt das ja schon mal auf die Qualität des PHP-Skriptes schließen. Also entweder überprüfen sie jetzt noch den Referer oder so etwas, oder ich übersehe einfach etwas (was desöfteren vorkommt).
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Trundle hat geschrieben:Das ``POST`` ist der Unterschied. Einfach `logindata` als zweiten Parameter von `urllib.urlopen` übergeben und nicht an die URL anhängen. Und dich vllt mal mit dem HTT-Protokoll beschäftigen.

Edit: Okay, das war vorher schon POST. Wenn das mit GET-Parametern ging, lässt das ja schon mal auf die Qualität des PHP-Skriptes schließen. Also entweder überprüfen sie jetzt noch den Referer oder so etwas, oder ich übersehe einfach etwas (was desöfteren vorkommt).
Ich überge ja logindata als 2 parameter an urlopen. Und Ich weiß das es daraus diesen String macht weil ich mir das endergebnis nach dem urlencode einfach mal mit print ausgegebn habe. Ist ein ganz normaler String. Probiers doch mal.

Und mit Referer kanns ja auch nichts zu tuns haben, da wenn ich ja direkt auf der Loginpage mit meinem Browser bin und dann diesen String mit der URL aufrufe passiert ja auch nichts, ist ja nicht nur im Python Skript.

Und wie gesagt, das geht leider nicht (mehr) :|.

Trotzdem vielen Dank,

MfG,
CracKPod
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Sorry das ich den Thread pushe aber ich habe mir die Dokumentation zu mechanize nochmal angeschaut und da steht ja sogar das wenn man die url dann mittels mechanize.urlopen(url, data) die variablen in 'data' mittels post übergeben werden.

Ich finde das Problem einfach nicht :|? Hat niemand eine Idee?

MfG,
CracKPod
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hast du mal die Unterschiede zwischen dem Request des Browsers und dem Machanize-Request zur Hand? Dann könnte man überlegen, wo das Problem sein könnte.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Danke Leonidas!

Du hast das Problem bereits indirekt gelöst, da du in vielen anderen Posts mechanize empfohlen hast.

Es gibt ja nach meinem Verständniss 2 Arten mechanize zu benutzen.

Entweder so wie ich 'low-level' und alles selber machen außer cookies zwischenspeichern oder die Unterklasse(?) mechanize.Browse benutzen.

Und mit der ging es hervorragend mittels browser.select_form(nr=0)

Danke :), trotzdem werde ich mir das irgendwann mal genauer anschauen, ich möchte sehen was da hintersteckt.

MfG,
CracKPod
Antworten