bei geocaching.com einloggen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
MasterJulian
User
Beiträge: 14
Registriert: Sonntag 8. November 2009, 17:46

Ich versuche gerade Infos von geocaching.com runter zu laden. Dazu muss ich mich jedoch erstmal einloggen (bzw den Cookie dazu hohlen). Normalerweise sollte das kein Problem sein, doch die Form beinhaltet so ne Art "Session ID". Ich lade also zuerst die Login Form um den Session Cookie und die "Session ID" zu empfangen und sende diese dann ab. Doch irgendwie klappt das nicht, obwohl die Daten richtig gesendet werden. Ich programmiere noch nicht so lange mit Python. Hier mein bisheriger Code:

Code: Alles auswählen

#!/usr/bin/env python
import urllib2
import urllib

user_agent = 'Opera 9.7 (Windows NT 5.2; U; en)'

def getcontent(url,returnheader=False,cookie=None,postdata=None):
    if cookie == None:
        header = {'User-Agent' : user_agent}
    else:
        header = {'User-Agent' : user_agent, 'Cookie ' : cookie}
    req = urllib2.Request(url,postdata,header)
    response = urllib2.urlopen(req)
    if returnheader == False:
        return response.read()
    else:
        return (response.read(),response.info())

def getcookie(user,passwd):
    content1 = getcontent('http://www.geocaching.com/login/default.aspx',True)
    cookie=content1[1]['set-cookie'].split(';')[0]
    pos1 = content1[0].find('id="__VIEWSTATE" value="')
    pos2 = content1[0][pos1+24:].find('"')
    VIEWSTATE = content1[0][pos1+24:pos1+24+pos2]
    args = urllib.urlencode({'__EVENTTARGET': '','__EVENTARGUMENT': '','__VIEWSTATE': VIEWSTATE,'ctl00$ContentBody$4myUsername': user, 'ctl00$ContentBody$myPassword': passwd, 'ctl00$ContentBody$cookie': 'on', 'ctl00$ContentBody$Button1': 'Login'})
    content2 = getcontent('http://www.geocaching.com/login/default.aspx',True,cookie,args)
    return content2
Jemand ne Idee wo mein Fehler liegt? Das "return content2" ist natürlich nur zum debuggen. Wenn das klappt, wird der cookie zurück gegeben.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Schau dir mal ganz genau an, welche Infos bei dem POST-Request beim Login gesendet werden. Zum Beispiel mit Wireshark oder Ähnlichem.

Haben die Jungs eigentlich keine API? :-/
MasterJulian
User
Beiträge: 14
Registriert: Sonntag 8. November 2009, 17:46

Leider haben die keine API. Per Wireshark habe ich schon verglichen aber kann nichts finden. Evtl übersehe ich was. Ich habe den 2ten Cookie noch angefügt aber ohne erfolg. Hier mal die 2 Logs:
Browser
Mein Script
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Sende mal einen Pseudo-Referer und einen gefölschten User-Agent.

Gruß
MasterJulian
User
Beiträge: 14
Registriert: Sonntag 8. November 2009, 17:46

Der User-Agent ist ja schon auf Opera gesetzt. Auch ein referer ändert an der Sache nichts. Ich bekomme immer einen user/password Invalid error. Obwohl die Daten zu 100% stimmen
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Seltsam. Kann ich leider auch nix mehr sagen, ich vermute mal, dass Whitespace (Newlines \n) in POST-Daten egal sind, oder? Ansonsten versuche es doch mal mit mechanize.
Antworten