2011-11-17 5 views
13

Je sais que je peux itérer à travers les cookies dans un cookiejar, et cela me permettrait de trouver un cookie avec un nom particulier - mais l'objet CookieJar lui-même ont des méthodes que je peux appeler pour obtenir un certain cookie par son nom?Obtenir cookie de CookieJar par son nom

Cela me sauve simplement d'avoir à écrire une méthode d'aide qui existe déjà.

+0

Non que je peux voir, non. Vous pouvez créer une fonction ou une sous-classe de l'objet CookieJar, mais je ne suis pas sûr de l'absence de méthode. – Blender

Répondre

14

Oui, la méthode __iter__ passera par chaque cookie dans CookieJar.

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

Un cookie n'est pas seulement une paire de noms et de valeurs. Dans sa longue liste (17) de propriétés, il y a domain et path. Une valeur de domaine de .ibm.com serait applicable au site Web mail.ibm.com par exemple. Une valeur de domaine de ibm.com et une valeur de chemin de /abc ne s'appliqueraient pas à la page Web ibm.com/index.htm. Donc, en fournissant le nom seul est insuffisant pour trouver la valeur d'un cookie applicable dans CookieJar.

Bien que la méthode __iter__ renvoie une liste d'objets cookie facilement, par exemple list(cj), la structure interne de CookieJar n'est pas une simple liste. Internes sur la classe CookieJar est here.

1

cookielib.CookieJar?

vous pouvez convertir le pot en une liste et le traiter, par ex.

et btw, j._cookies est en fait un dict-dict déjà, mais pas complètement trivialement indexé.

fichier de cookie jar?

Je pensais que ce étaient des fichiers texte ...

3

Vous pouvez également utiliser dict_from_cookiejar, qui renvoie un dictionnaire clé/valeur à partir d'un CookieJar. Quelque chose comme:

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

puis accédez à votre valeur de cookie par clé.

3

Il est en situation irrégulière internes, mais vous pouvez accéder aux cookies directement comme ceci: cookiejar._cookies[domain][path][name]

Questions connexes