2010-02-08 17 views
7

Ich muss eine Datei herunterladen, die auf einer passwortgeschützten Seite ist. Um manuell auf die Seite zu gelangen, muss ich mich zunächst über eine normale Anmeldeseite authentifizieren. Ich möchte mit curl diese Seite im Skript abrufen.
Mein Skript erste Logins. Es scheint erfolgreich zu sein - es gibt eine 200 von einem PUT zu/login zurück. Allerdings holt das die gewünschte Seite fehlschlägt, mit einem 500.Einloggen und Cookies in pycurl verwenden

mir einen „Keksdose“ bin mit:

C.setopt(pycurl.COOKIEJAR, 'cookie.txt') 

Im ausführlichen Modus, ich kann sehen, Cookies ausgetauscht werden, wenn ich die Datei, die ich hole brauchen. Jetzt meine Frage: Gibt es mehr, einen COOKIEJAR zu benutzen?

Antwort

11

Ich glaube, Curl speichert die Cookies, aber Sie müssen sie explizit verwenden. Ich habe jedoch immer nur die Befehlszeilenschnittstelle dafür verwendet. Scannen der Dokumentation ich glaube, Sie könnten versuchen wollen:

C.setopt(pycurl.COOKIEFILE, 'cookie.txt') 

(vor der zweiten Anfrage)

+1

Jemand sollte dies als richtig markieren. Es klappt!!! Vance, gib diesem Mann ein paar Requisiten !!! –

2

wds liegt direkt an.

Für Ihre weitere Erbauung basieren die verfügbaren Optionen auf denen unter http://curl.haxx.se/libcurl/c/curl_easy_setopt.html (siehe Abschnitt über Cookie-Verknüpfungen).

ein 500 ist ein interner Server Fehler ... schwer, sicher zu sein, ob dies auf Ihre Skript ohne weitere Informationen über das, was hier los ist verantwortlich gemacht werden kann. andere Daten werden andernfalls könnten Sie die Seite erwartet (in keinem Zusammenhang mit Cookies) für alles, was wir wissen, passieren (und sie haben nicht anmutige Fehlerbehandlung! implementiert)

jb

7

Sie sollten Cookie speichern und dann lesen aus es:

C.setopt(pycurl.COOKIEJAR, 'cookie.txt') 
C.setopt(pycurl.COOKIEFILE, 'cookie.txt') 

Hier ist, was --help zurück curl:

-b, --cookie STRING/FILE String or file to read cookies from (H) 
-c, --cookie-jar FILE Write cookies to this file after operation (H) 

dieses Beispiel Siehe:

def connect(self): 
    ''' 
    Connect to NGNMS server 
    ''' 
    host_url = self.ngnms_host + '/login' 

    c = pycurl.Curl() 
    c.setopt(c.URL, host_url) 
    c.setopt(pycurl.TIMEOUT, 10) 

    c.setopt(pycurl.FOLLOWLOCATION, 1) 
    c.setopt(pycurl.POSTFIELDS, 'j_username={ngnms_user}&j_password={ngnms_password}'.format(**self.ngnms_login)) 
    c.setopt(pycurl.COOKIEJAR, 'data/ngnms.cookie') 

    # c.setopt(c.VERBOSE, True) 

    c.setopt(pycurl.SSL_VERIFYPEER, 0); 
    session = c 
    return session