2011-11-17 33 views
13

Tôi biết rằng tôi có thể lặp qua cookie trong cookiejar và điều này sẽ cho phép tôi tìm cookie có tên cụ thể - nhưng chính đối tượng CookieJar có bất kỳ phương pháp nào tôi có thể gọi để nhận một cookie nào đó theo tên?Lấy cookie từ CookieJar theo tên

Nó chỉ giúp tôi phải viết phương thức trợ giúp đã tồn tại.

+0

Không phải là tôi có thể thấy, không có. Bạn có thể tạo một hàm hoặc phân lớp đối tượng CookieJar, nhưng tôi không chắc tại sao không có phương thức nào tồn tại. – Blender

Trả lời

14

Vâng, phương pháp __iter__ sẽ đi qua từng cookie trong CookieJar.

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

Cookie không chỉ là tên và cặp giá trị. Trong danh sách dài (17) thuộc tính, có domainpath. Giá trị tên miền là .ibm.com sẽ được áp dụng cho trang web mail.ibm.com chẳng hạn. Giá trị tên miền là ibm.com và giá trị đường dẫn của /abc sẽ không áp dụng cho trang web ibm.com/index.htm. Vì vậy, bằng cách cung cấp tên một mình là không đủ để tìm giá trị của một cookie áp dụng trong CookieJar.

Mặc dù phương thức __iter__ sẽ trả về danh sách cookie đối tượng dễ dàng, ví dụ list(cj), cấu trúc bên trong CookieJar không phải là danh sách đơn giản. Nội bộ về lớp học CookieJarhere.

1

cookielib.CookieJar?

bạn có thể chuyển đổi lọ thành danh sách và quá trình, ví dụ: {i.name: i for i in list(j)}

và btw, j._cookies thực sự là chế độ dict-dict, mặc dù không được lập chỉ mục hoàn toàn không đáng kể.

tệp jar cookie?

Tôi nghĩ đó là những file văn bản đơn giản ...

3

Bạn cũng có thể sử dụng dict_from_cookiejar, trả về từ điển khóa/giá trị từ CookieJar. Một cái gì đó như:

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

và sau đó truy cập giá trị cookie của bạn theo khóa.

3

Đó là internals không có giấy tờ, nhưng bạn có thể truy cập các tập tin cookie trực tiếp như thế này: cookiejar._cookies[domain][path][name]

Các vấn đề liên quan