urllib2,cookielib: URL laden schlägt fehl

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Bewa
User
Beiträge: 4
Registriert: Samstag 6. Juni 2009, 09:47

Hallo zusammen,

ich versuche, mich mit urllib2 und cookielib (python 2.6) bei einer Webseite anzumelden (https). In einem anderen Skript habe ich das hinbekommen, der einzige Unterschied ist der, dass in diesem anderen Skript ein Proxy verwendet wird und ich für das aktuelle Skript keinen Proxy verwenden will.

Ein Objekt, das für mich die Interaktion mit der Webseite machen soll, hat dazu diesen Konstruktor und eine Methode, um mir die Seiten zu laden (und dabei ggf. mit POST umzugehen und auch gleich das HTML zu parsen):

Code: Alles auswählen

import urllib,urllib2,cookielib
[...]
    def __init__(self):
        cj=cookielib.CookieJar
        self.opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        print "init done"

    def getPage(self,url,post=None):
        """Load a given page with optional POST values."""
        if post is not None:
            postdata=urllib.urlencode(post)
            sock=self.opener.open(url,postdata)
        else:
            sock=self.opener.open(url)
        print "opened"
        page=sock.read()
        [...]
Das entspricht weitestgehend dem Fragment von http://www.python-forum.de/viewtopic.php?p=20068#p20068, nur dass ich noch die POST-Daten mit übergebe und es bei mir auf zwei Objektmethoden verteilt ist.

Nun zu meinem Problem:
Wenn ich das Skript ausführe, erhalte ich folgenden Fehler:
Traceback [...]
sock=self.opener.open(url,postdata)
File "C:\python26\lib\urllib2.py", line 389 in open
req=meth(req)
File "C:\python26\lib\urllib2.py", line 1181 in http_request
self.cookiejar.add_cookie_header(request)
TypeError: unbound method add_cookie_header() must be called with CookieJar instance as first argument (gut Request instance instead)
Wenn ich jedoch die Python-Konsole nehme und das Fragment aus dem Post abtippe (das ist identisch zu meinem Code, jedoch ohne Klassenstruktur, POST und self), funktioniert es tadellos (ob der Login geklappt hat, habe ich nicht überprüft, es kam zumindest HTML zurück).

Mit Google habe ich nichts bezüglich der Fehlermeldung finden können und sämtliches herumdoktern hat mir nicht weitergeholfen.
Woran kann der Fehler liegen und was habe ich falsch gemacht?
deets

Code: Alles auswählen

def __init__(self):
        cj=cookielib.CookieJar()  # hier fehlten die Klammern
Bewa
User
Beiträge: 4
Registriert: Samstag 6. Juni 2009, 09:47

Danke, es funktioniert jetzt einwandrei (zumindest was den urllib/cookielib-Teil betriff).

Und über solche Details zerbricht man sich stundenlang den Kopf...
Antworten