2011-11-17 53 views
13

我知道我可以遍历cookiejar中的cookie,这将允许我找到一个具有特定名称的cookie - 但CookieJar对象本身是否有我可以调用的任何方法来获取一个名字的cookie?从CookieJar获取Cookie的名称

它只是节省我不得不写一个已经存在的帮助方法。

+0

不,我所看到的,没有。你可以做一个函数或子类的CookieJar对象,但我不知道为什么没有方法存在。 – Blender

回答

14

是的,__iter__方法将通过每个cookie中CookieJar

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

Cookie不仅仅是一个名称和值对。在其长列表(17)中,有domainpath。例如,域值.ibm.com将适用于网站mail.ibm.com。域值ibm.com和路径值/abc不适用于网页ibm.com/index.htm。所以通过单独提供名称不足以在CookieJar中找到适用的cookie的价值。

虽然__iter__方法会很容易地返回cookie对象的列表,例list(cj),的CookieJar内部结构不是简单的列表。关于CookieJar类的内部结构是here

1

cookielib.CookieJar?

您可以将jar转换为列表并进行处理,例如{i.name: i for i in list(j)}

和顺便说一句,j._cookies实际上已经是一个字典,虽然不是完全微不足道的索引。

Cookie jar文件?

我以为那些都是纯文本文件......

3

您也可以使用dict_from_cookiejar,它从CookieJar返回一个键/值字典。例如:

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

然后按键访问您的cookie值。

3

这是无证的内部,但是您可以直接访问饼干这样的:cookiejar._cookies[domain][path][name]