2011-11-17 45 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]