2010-02-08 29 views
7

Necesito descargar un archivo que está en una página protegida por contraseña. Para acceder a la página manualmente, primero debo autenticarme a través de una página de inicio de sesión normal. Quiero usar curl para buscar esta página en script.
Mis primeros inicios de secuencia de comandos. Parece tener éxito: devuelve un 200 desde un PUT a/login. Sin embargo, la zona de alcance de la página deseada falla, con un 500.Iniciando sesión y utilizando cookies en pycurl

estoy usando un "tarro de las galletas":

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

en modo detallado, puedo ver las cookies que se intercambian cuando voy a buscar el archivo que he necesitar. Ahora mi pregunta: ¿hay más para usar un COOKIEJAR?

Respuesta

11

Creo que Curl almacenará las cookies, pero debe usarlas explícitamente. Sin embargo, solo he usado la interfaz de línea de comandos para esto. El escaneo de la documentación Creo que es posible que desee probar:

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

(antes de la segunda petición)

+1

Alguien debería marcar esto como correcto. ¡¡¡Funciona!!! ¡Vance, dale a este hombre algunos accesorios! –

2

WDS está justo en.

para su posterior edificación, las opciones disponibles se basan en las de http://curl.haxx.se/libcurl/c/curl_easy_setopt.html (consulte la sección sobre atajos de cookies).

a 500 es un error interno del servidor ... es difícil estar seguro de si esto se puede culpar a su secuencia de comandos sin saber más información sobre lo que está sucediendo aquí. usted podría ser que no superen los otros datos de la página se esperaba (no relacionada con las cookies) por lo que sabemos (y que no ha implementado la gestión de errores graciosa!)

jb

7

Debe almacenar cookies primero y luego leer de que:

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

Aquí lo enrollamiento --help devueltos:

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

Ver esta muestra:

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 
Cuestiones relacionadas