2010-02-08 6 views
7

muszę pobrać plik, który jest chroniony hasłem na stronie. Aby ręcznie przejść do strony, muszę najpierw uwierzytelnić się na zwykłej stronie logowania. Chcę użyć curl, aby pobrać tę stronę w skrypcie.
Mój skrypt pierwszy loguje się. Wygląda na to, że się udało - zwraca 200 z PUT do/login. Jednak pobrać z zawodzi żądanej strony, z 500.zalogowaniu i przy użyciu ciasteczek w pycurl

używam „Cookie Jar”:

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

W trybie gadatliwym, widzę ciasteczka wymieniane kiedy pobrać plik I potrzeba. Teraz moje pytanie: czy jest więcej do używania COOKIEJAR?

Odpowiedz

11

wierzę Curl będzie przechowywać pliki cookies, ale trzeba ich używać w sposób jawny. W tym celu użyłem tylko interfejsu wiersza poleceń. Skanowanie dokumentacji myślę, że może chcesz spróbować:

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

(przed drugim życzenie)

+1

Ktoś powinien zaznaczyć to jako prawidłowe. To działa!!! Vance, daj temu człowiekowi kilka rekwizytów !!! –

2

WDS jest na prawo.

W celu dalszego udoskonalenia dostępne opcje są oparte na tych pod numerem http://curl.haxx.se/libcurl/c/curl_easy_setopt.html (zobacz sekcję o skrótach plików cookie).

a 500 to wewnętrzny błąd serwera ... Trudno się upewnić, czy można go obwiniać na swoim skrypcie, nie wiedząc więcej o tym, co się tutaj dzieje. można być w przypadku braku przekazać inne dane strony oczekuje (niezwiązane z plików cookie) dla wszystkich wiemy (i nie zostały one wdrożone wdzięku obsługę błędów!)

jb

7

Należy przechowywać pliki cookie, a następnie odczytać z to:

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

Oto co curl --help powrócił:

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

Zobacz tę próbkę:

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