2011-11-17 14 views
13

Sé que puedo iterar a través de las cookies en un cookiejar, y esto me permitiría encontrar una cookie con un nombre particular, pero el objeto CookieJar en sí tiene algún método que pueda llamar para obtener una cierta cookie por nombre?Obtener cookies de CookieJar por el nombre

Simplemente me ahorra tener que escribir un método de ayuda que ya existe.

+0

No es que yo puedo ver, no. Podría hacer una función o subclase del objeto CookieJar, pero no estoy seguro de por qué no existe el método. – Blender

Respuesta

14

Sí, el método __iter__ pasarán por cada galleta en CookieJar.

for cookie in cj: 
    print cookie.name, cookie.value, cookie.domain #etc etc 

Una cookie no es solo un par de nombre y valor. En su lista larga (17) de propiedades, hay domain y path. Un valor de dominio de .ibm.com sería aplicable al sitio web mail.ibm.com por ejemplo. Un valor de dominio de ibm.com y el valor de ruta de /abc no se aplicarían a la página web ibm.com/index.htm. Por lo tanto, al proporcionar el nombre solo no es suficiente para encontrar el valor de una cookie aplicable en CookieJar.

aunque el método __iter__ volverá una lista de objetos fácilmente cookie, ejemplo list(cj), la estructura interna de CookieJar No es una simple lista. La información interna sobre la clase CookieJar es here.

1

cookielib.CookieJar?

puede convertir jar a una lista y procesar eso, p. {i.name: i for i in list(j)}

y por cierto, j._cookies ya es un dict-dict ya, aunque no completamente indexado de manera trivial.

cookie jar archivo?

pensé que esos eran archivos de texto plano ...

3

También puede usar dict_from_cookiejar, que devuelve un diccionario de clave/valor de un CookieJar. Algo como:

my_cookies = requests.utils.dict_from_cookiejar(s.cookies) 

y luego acceda al valor de su cookie por clave.

3

Es internos indocumentados, pero se puede acceder a las cookies directamente como esto: cookiejar._cookies[domain][path][name]