2009-05-28 12 views
17

¿Cómo leo todas las cookies en Python sin saber sus nombres?Recuperando todas las cookies en Python

+3

Cuando dice "leer de nuevo", quiere usted decir a) leerlos de una respuesta HTTP, o b) leerlos fuera de la CookieJar? ¿O hay una interpretación (c)? –

Respuesta

4

Mire los encabezados Cookie: en la respuesta HTTP que obtiene, analice sus contenidos con el módulo Cookie en la biblioteca estándar.

+0

¿cómo hago eso? ... –

+1

¿Cómo se ven las cookies en la respuesta HTTP? Eso depende de cómo se obtenga esa respuesta, por ejemplo urllib.urlretrieve devuelve una tupla de 2 elementos, el segundo es el httplib.HTTPMessage con los metadatos; si prefiere urllib.urlopen, obtiene HTTPMessage llamando a .info() en el objeto de pseudoarchivo que devuelve urlopen; etc., etc. –

4

Ponga os.environ['HTTP_COOKIE'] en una matriz:

#!/usr/bin/env python 

import os 

if 'HTTP_COOKIE' in os.environ: 
    cookies = os.environ['HTTP_COOKIE'] 
    cookies = cookies.split('; ') 
    handler = {} 

    for cookie in cookies: 
    cookie = cookie.split('=') 
    handler[cookie[0]] = cookie[1] 
+0

Creo que esto solo es válido si se llama a un CGI en ... –

24

No estoy seguro si esto es lo que buscas, pero aquí es un ejemplo sencillo donde poner las galletas en una CookieJar y leer de nuevo:

from urllib2 import Request, build_opener, HTTPCookieProcessor, HTTPHandler 
import cookielib 

#Create a CookieJar object to hold the cookies 
cj = cookielib.CookieJar() 
#Create an opener to open pages using the http protocol and to process cookies. 
opener = build_opener(HTTPCookieProcessor(cj), HTTPHandler()) 

#create a request object to be used to get the page. 
req = Request("http://www.about.com") 
f = opener.open(req) 

#see the first few lines of the page 
html = f.read() 
print html[:50] 

#Check out the cookies 
print "the cookies are: " 
for cookie in cj: 
    print cookie 
+0

útil, ¡gracias! – chenge

+1

Si la cookie que obtuve es '', ¿cómo obtengo la parte '_b'? 'cookie [" _ b "]' no funciona – Shane

4

Esto puede ser exactamente lo que estás buscando.

Python 3,4

import requests 

r = requests.get('http://www.about.com/') 
c = r.cookies 
i = c.items() 

for name, value in i: 
    print(name, value) 
Cuestiones relacionadas