2011-11-17 15 views
13

Wiem, że mogę przejrzeć pliki cookie w cookiejar, a to pozwoliłoby mi znaleźć ciasteczko o konkretnej nazwie - ale sam obiekt CookieJar ma wszelkie metody, które mogę wywołać, aby uzyskać pewien plik cookie po nazwie?Pobierz ciasteczko z CookieJar o nazwie

To po prostu zapisuje mi konieczność napisania metody pomocnika, która już istnieje.

+0

że nie widzę, no. Można utworzyć funkcję lub podklasę obiektu CookieJar, ale nie jestem pewien, dlaczego nie istnieje żadna metoda. – Blender

Odpowiedz

14

Tak, metoda __iter__ przejdzie przez każdy plik cookie w CookieJar.

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

Cookie to nie tylko nazwa i para wartości. Na długiej liście (17) właściwości znajduje się domain i path. Wartość domeny .ibm.com będzie miała na przykład zastosowanie na stronie internetowej mail.ibm.com. Wartość domeny ibm.com i wartość ścieżki /abc nie będą miały zastosowania do strony internetowej ibm.com/index.htm. Tak więc podanie samej nazwy jest niewystarczające, aby znaleźć wartość odpowiedniego pliku cookie w CookieJar.

Chociaż metoda __iter__ będzie łatwo wrócić listę cookie obiektów, przykład list(cj), wewnętrzna struktura CookieJar nie jest prosta lista. Standardy dotyczące klasy CookieJar to here.

1

cookielib.CookieJar?

można przekonwertować słoik na listę i przetworzyć np. {i.name: i for i in list(j)}

i tak dalej, j._cookies jest już dyktowaniem, ale nie jest całkowicie zindeksowane.

plik pliku cookie?

myślałem były to pliki tekstowe ...

3

Można również użyć dict_from_cookiejar, który zwraca słownik klucza/wartości z pliku CookieJar. Coś takiego:

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

, a następnie uzyskać dostęp do wartości cookie według klucza.

3

To nielegalni wewnętrzne, ale można uzyskać dostęp do plików cookie bezpośrednio tak: cookiejar._cookies[domain][path][name]