Iniciar sesión y usar cookies en pycurl

Necesito descargar un archivo que está en una página protegida por contraseña. Para llegar 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 obtener esta página en script.
Mi script primero inicia sesión. Parece tener éxito: devuelve un 200 desde un PUT a / login. Sin embargo, la recuperación de la página deseada falla, con un 500.

Estoy usando un “tarro de cookies”:

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

En modo detallado, puedo ver las cookies que se intercambian cuando recupero el archivo que necesito. Ahora mi pregunta: ¿Hay más para usar un COOKIEJAR?

Creo que Curl almacenará las cookies, pero debe usarlas explícitamente. Aunque solo he usado la interfaz de línea de comandos para esto. Escaneando la documentación, creo que querrás probar:

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

(antes de la segunda solicitud)

Primero debe almacenar la cookie y luego leerla:

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

Aquí lo que rizo – ayuda regresó:

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

Vea 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 

wds tiene razón.

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 accesos directos de cookies).

un 500 es un error interno del servidor … es difícil saber si se puede culpar de esto a su script sin saber más sobre lo que está sucediendo aquí. Es posible que no pueda pasar otros datos que la página espera (no relacionados con las cookies) para todo lo que sabemos (¡y no han implementado un manejo correcto de errores!)

jb