2011-11-17 2 views
13

So che posso scorrere i cookie in un cookiejar, e questo mi permetterebbe di trovare un cookie con un nome particolare - ma l'oggetto CookieJar stesso ha metodi che posso chiamare per ottenere un certo biscotto per nome?Ottieni cookie da CookieJar per nome

Mi salva semplicemente dover scrivere un metodo di supporto che esiste già.

+0

Non che posso vedere, no. È possibile creare una funzione o una sottoclasse dell'oggetto CookieJar, ma non sono sicuro del motivo per cui non esiste alcun metodo. – Blender

risposta

14

Sì, il metodo __iter__ passerà attraverso ogni biscotto in CookieJar.

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

Un cookie non è solo un nome e una coppia di valori. Nella sua lunga lista (17) di proprietà, vi è domain e path. Ad esempio, un valore di dominio di .ibm.com potrebbe essere applicabile al sito Web mail.ibm.com. Un valore di dominio di ibm.com e il valore di percorso di /abc non si applicano alla pagina Web ibm.com/index.htm. Quindi, fornire il nome da solo non è sufficiente per trovare il valore di un cookie applicabile in CookieJar.

Sebbene il metodo __iter__ restituirà un elenco di oggetti cookie facilmente, ad esempio list(cj), la struttura interna di CookieJar non è un semplice elenco. Gli interni della classe CookieJar sono here.

1

cookielib.CookieJar?

è possibile convertire il vaso in un elenco ed elaborarlo, ad es. {i.name: i for i in list(j)}

e btw, j._cookies è in realtà un dettato già, anche se non del tutto banalmente indicizzato.

file jar cookie?

ho pensato quelli erano i file di testo ...

3

È anche possibile utilizzare dict_from_cookiejar, che restituisce un dizionario chiave/valore da un CookieJar. Qualcosa di simile:

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

e quindi accedere al valore del cookie per chiave.

3

E 'interni senza documenti, ma è possibile accedere direttamente i cookie in questo modo: cookiejar._cookies[domain][path][name]