Seite 1 von 1

bei geocaching.com einloggen

Verfasst: Sonntag 8. November 2009, 18:14
von MasterJulian
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.

Verfasst: Sonntag 8. November 2009, 22:02
von Dauerbaustelle
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? :-/

Verfasst: Sonntag 8. November 2009, 22:26
von MasterJulian
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

Verfasst: Sonntag 8. November 2009, 23:05
von Dauerbaustelle
Sende mal einen Pseudo-Referer und einen gefölschten User-Agent.

Gruß

Verfasst: Sonntag 8. November 2009, 23:57
von MasterJulian
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

Verfasst: Montag 9. November 2009, 00:09
von Dauerbaustelle
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.