Mô-đun định nghĩa các lớp để tự động xử lý cookie HTTP. Nó rất hữu ích để truy cập các trang web yêu cầu các mẩu dữ liệu nhỏ - cookie - được đặt trên máy khách bằng phản hồi HTTP từ máy chủ web, sau đó được trả về máy chủ trong các yêu cầu HTTP sau này
Cả giao thức cookie Netscape thông thường và giao thức được xác định bởi RFC 2965 đều được xử lý. Xử lý RFC 2965 bị tắt theo mặc định. Cookie RFC 2109 được phân tích thành cookie Netscape và sau đó được coi là cookie Netscape hoặc RFC 2965 theo 'chính sách' có hiệu lực. Lưu ý rằng phần lớn cookie trên internet là cookie Netscape. cố gắng tuân theo giao thức cookie Netscape thực tế [về cơ bản khác với giao thức được đặt ra trong đặc điểm kỹ thuật Netscape ban đầu], bao gồm lưu ý các thuộc tính cookie
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]2 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]3 được giới thiệu với RFC 2965
Ghi chú
Các tham số được đặt tên khác nhau được tìm thấy trong tiêu đề Set-Cookie và Set-Cookie2 [ví dụ:.
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]4 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]0] thường được gọi là thuộc tính. Để phân biệt chúng với các thuộc tính Python, tài liệu cho mô-đun này sử dụng thuật ngữ thuộc tính cookie thay thế
Mô-đun xác định ngoại lệ sau
ngoại lệ http. lọ đựng bánh quy. Lỗi tảiCác trường hợp tăng ngoại lệ này do không tải được cookie từ một tệp. là một lớp con của
Đã thay đổi trong phiên bản 3. 3. LoadError được tạo thành một lớp con của thay vì.
Các lớp sau đây được cung cấp
lớp http. lọ đựng bánh quy. CookieJar[chính sách=Không có]chính sách là một đối tượng thực hiện giao diện
Lớp lưu trữ cookie HTTP. Nó trích xuất cookie từ các yêu cầu HTTP và trả về chúng trong các phản hồi HTTP. các phiên bản tự động hết hạn chứa cookie khi cần thiết. Các lớp con cũng chịu trách nhiệm lưu trữ và truy xuất cookie từ tệp hoặc cơ sở dữ liệu
lớp http. lọ đựng bánh quy. FileCookieJar[tên tệp=Không có , tải độ trễ=Không , chính sách=Không có]chính sách là một đối tượng thực hiện giao diện. Đối với các đối số khác, hãy xem tài liệu về các thuộc tính tương ứng
A có thể tải cookie từ và có thể lưu cookie vào một tệp trên đĩa. Cookie KHÔNG được tải từ tệp được đặt tên cho đến khi phương thức hoặc được gọi. Các lớp con của lớp này được ghi lại trong phần
Điều này không nên được khởi tạo trực tiếp - thay vào đó hãy sử dụng các lớp con của nó bên dưới
Đã thay đổi trong phiên bản 3. 8. Tham số tên tệp hỗ trợ một.
lớp http. lọ đựng bánh quy. Chính sách cookieLớp này chịu trách nhiệm quyết định xem mỗi cookie có được chấp nhận từ/trả về máy chủ hay không
lớp http. lọ đựng bánh quy. Chính sách Cookie mặc định[tên_miền_bị_cấm=Không có , allowed_domains=Không , netscape=Đúng , rfc2965=Sai , rfc2109_as_netscape=Không có , hide_cookie2=Sai , strict_domain=Sai , strict_rfc2965_unverifiable=True , strict_ns_unverifiable=Sai , strict_ns_domain=Chính sách Cookie mặc định. Tự do miền , strict_ns_set_initial_đô=Sai , strict_ns_set_path=Sai , secure_protocols=['https', 'wss']]Đối số hàm tạo chỉ được chuyển dưới dạng đối số từ khóa. blocks_domains là một chuỗi tên miền mà chúng tôi không bao giờ chấp nhận cookie cũng như không trả lại cookie cho. allow_domains nếu không , đây là chuỗi các miền duy nhất mà chúng tôi chấp nhận và trả lại cookie. secure_protocols là một chuỗi các giao thức có thể thêm cookie bảo mật vào. Theo mặc định, https và wss [websocket an toàn] được coi là giao thức an toàn. Đối với tất cả các đối số khác, hãy xem tài liệu về và đối tượng
thực hiện các quy tắc chấp nhận / từ chối tiêu chuẩn cho cookie Netscape và RFC 2965. Theo mặc định, cookie RFC 2109 [tức là. cookie nhận được trong tiêu đề Set-Cookie với thuộc tính cookie phiên bản là 1] được xử lý theo quy tắc RFC 2965. Tuy nhiên, nếu quá trình xử lý RFC 2965 bị tắt hoặc là
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8, cookie RFC 2109 sẽ bị phiên bản 'hạ cấp' thành cookie Netscape, bằng cách đặt thuộc tính
import urllib.request from http.cookiejar import CookieJar, DefaultCookiePolicy policy = DefaultCookiePolicy[ rfc2965=True, strict_ns_domain=Policy.DomainStrict, blocked_domains=["ads.net", ".ads.net"]] cj = CookieJar[policy] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]0 của phiên bản thành 0. cũng cung cấp một số tham số để cho phép tinh chỉnh chính sáchlớp http. lọ đựng bánh quy. Bánh quy
Lớp này đại diện cho cookie Netscape, RFC 2109 và RFC 2965. Người dùng xây dựng các phiên bản của riêng họ không được mong đợi. Thay vào đó, nếu cần, hãy gọi
import urllib.request from http.cookiejar import CookieJar, DefaultCookiePolicy policy = DefaultCookiePolicy[ rfc2965=True, strict_ns_domain=Policy.DomainStrict, blocked_domains=["ads.net", ".ads.net"]] cj = CookieJar[policy] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]5 trong trường hợp
Xem thêm
mô-đunMở URL với xử lý cookie tự động
mô-đunCác lớp cookie HTTP, chủ yếu hữu ích cho mã phía máy chủ. Các mô-đun và không phụ thuộc vào nhau
https. //Xoăn. se/rfc/cookie_spec. htmlThông số kỹ thuật của giao thức cookie Netscape ban đầu. Mặc dù đây vẫn là giao thức thống trị, nhưng 'giao thức cookie Netscape' được triển khai bởi tất cả các trình duyệt chính [và ] chỉ mang một nét tương đồng thoáng qua với giao thức được phác thảo trong
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]52RFC 2109 - Cơ chế quản lý trạng thái HTTP
Đã lỗi thời bởi RFC 2965. Sử dụng Set-Cookie với phiên bản=1
RFC 2965 - Cơ chế quản lý trạng thái HTTPGiao thức Netscape với các lỗi đã được sửa. Sử dụng Set-Cookie2 thay cho Set-Cookie. Không được sử dụng rộng rãi
http. //kristol. org/cookie/errata. htmlLỗi chưa hoàn thành đối với RFC 2965
RFC 2964 - Sử dụng Quản lý trạng thái HTTP
Đối tượng CookieJar và FileCookieJar
các đối tượng hỗ trợ giao thức để lặp lại các đối tượng chứa
có các phương pháp sau
CookieJar. add_cookie_header[yêu cầu]Thêm tiêu đề Cookie chính xác vào yêu cầu
Nếu chính sách cho phép [nghĩa là. các thuộc tính
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]56 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]57 của phiên bản ’ lần lượt là đúng và sai], tiêu đề Cookie2 cũng được thêm vào khi thích hợp
Đối tượng yêu cầu [thường là một thể hiện] phải hỗ trợ các phương thức
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]51,
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]52,
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]53,
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]54,
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]55 và các thuộc tính
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]56,
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]57,
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]58 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]59 như được ghi lại bởi
Đã thay đổi trong phiên bản 3. 3. đối tượng yêu cầu cần thuộc tính
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]59. Sự phụ thuộc vào phương pháp không dùng nữa
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]52 đã bị xóa. CookieJar. extract_cookies[phản hồi , yêu cầu]
Trích xuất cookie từ phản hồi HTTP và lưu trữ chúng trong tệp , nếu được phép theo chính sách
Sẽ tìm kiếm các tiêu đề Set-Cookie và Set-Cookie2 được phép trong đối số phản hồi và lưu trữ cookie khi thích hợp [tùy thuộc vào sự chấp thuận của phương thức]
Đối tượng phản hồi [thường là kết quả của lệnh gọi hoặc tương tự] phải hỗ trợ phương thức
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]57, phương thức này trả về một thể hiện
Đối tượng yêu cầu [thường là một thể hiện] phải hỗ trợ phương thức
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]51 và các thuộc tính
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]56,
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]58 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]59, như được ghi lại bởi. Yêu cầu được sử dụng để đặt giá trị mặc định cho các thuộc tính cookie cũng như để kiểm tra xem cookie có được phép đặt không
Đã thay đổi trong phiên bản 3. 3. đối tượng yêu cầu cần thuộc tính
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]59. Sự phụ thuộc vào phương pháp không dùng nữa
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]52 đã bị xóa. CookieJar. set_policy[chính sách]
Đặt phiên bản sẽ được sử dụng
CookieJar. make_cookies[phản hồi , yêu cầu]Trả về chuỗi các đối tượng được trích xuất từ đối tượng phản hồi
Xem tài liệu để biết các giao diện cần có của các đối số phản hồi và yêu cầu
CookieJar. set_cookie_if_ok[cookie , yêu cầu]Đặt chính sách nếu cho biết bạn có thể làm như vậy
CookieJar. set_cookie[cookie]Đặt , mà không kiểm tra với chính sách để xem có nên đặt hay không
CookieJar. xóa[[miền[, path[, name]]]]Xóa một số cookie
Nếu được gọi mà không có đối số, hãy xóa tất cả cookie. Nếu được cung cấp một đối số duy nhất, chỉ các cookie thuộc miền đó sẽ bị xóa. Nếu được cung cấp hai đối số, các cookie thuộc miền đã chỉ định và đường dẫn URL sẽ bị xóa. Nếu được cung cấp ba đối số thì cookie có tên miền, đường dẫn và tên được chỉ định sẽ bị xóa
Tăng nếu không tồn tại cookie phù hợp
CookieJar. clear_session_cookies[]Hủy tất cả cookie phiên
Loại bỏ tất cả các cookie được chứa có thuộc tính
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]33 thực [thường là do chúng không có thuộc tính cookie
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]2 hoặc
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]0 hoặc thuộc tính cookie
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]33 rõ ràng]. Đối với các trình duyệt tương tác, kết thúc phiên thường tương ứng với việc đóng cửa sổ trình duyệt
Lưu ý rằng phương thức
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]37 dù sao cũng sẽ không lưu cookie phiên, trừ khi bạn yêu cầu khác bằng cách chuyển một đối số ignore_discard đúng
thực hiện các phương pháp bổ sung sau đây
FileCookieJar. lưu[tên tệp=Không có, ignore_discard=False, ignore_expires=False]Lưu cookie vào một tệp
Lớp cơ sở này tăng. Các lớp con có thể không thực hiện phương thức này
tên tệp là tên của tệp để lưu cookie. Nếu tên tệp không được chỉ định, thì
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]40 được sử dụng [giá trị mặc định của nó là giá trị được truyền cho hàm tạo, nếu có];
bỏ qua_discard. lưu ngay cả cookie được đặt để loại bỏ. bỏ qua_hết hạn. lưu ngay cả cookie đã hết hạn
Tệp bị ghi đè nếu nó đã tồn tại, do đó xóa sạch tất cả các cookie chứa trong đó. Các cookie đã lưu có thể được khôi phục sau này bằng phương thức hoặc
FileCookieJar. tải[tên tệp=Không có, ignore_discard=False, ignore_expires=False]Tải cookie từ một tệp
Cookie cũ được giữ trừ khi bị ghi đè bởi cookie mới được tải
Đối số là như đối với
Tệp được đặt tên phải ở định dạng mà lớp hiểu được hoặc sẽ được nâng lên. Ngoài ra, có thể được nâng lên, ví dụ nếu tệp không tồn tại
Đã thay đổi trong phiên bản 3. 3. đã từng được nuôi dưỡng, bây giờ nó là bí danh của.
FileCookieJar. hoàn nguyên[tên tệp=Không có, ignore_discard=False, ignore_expires=False]Xóa tất cả cookie và tải lại cookie từ tệp đã lưu
có thể đưa ra các ngoại lệ giống như. Nếu có lỗi, trạng thái của đối tượng sẽ không bị thay đổi
các trường hợp có các thuộc tính công khai sau
FileCookieJar. tên tệpTên tệp của tệp mặc định để giữ cookie. Thuộc tính này có thể được gán cho
FileCookieJar. tải trễNếu đúng, hãy tải cookie một cách lười biếng từ đĩa. Thuộc tính này không nên được gán cho. Đây chỉ là một gợi ý, vì điều này chỉ ảnh hưởng đến hiệu suất chứ không ảnh hưởng đến hành vi [trừ khi cookie trên đĩa đang thay đổi]. Một đối tượng có thể bỏ qua nó. Không có lớp nào trong thư viện chuẩn tải cookie một cách lười biếng
Lớp con FileCookieJar và hợp tác với trình duyệt web
Các lớp con sau đây được cung cấp cho đọc và viết
lớp http. lọ đựng bánh quy. MozillaCookieJar[tên tệp=Không có, delayload=None, policy=None]A có thể tải và lưu cookie vào đĩa ở định dạng tệp Mozilla
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]08 [cũng được sử dụng bởi trình duyệt curl và Lynx và Netscape]
Ghi chú
Điều này làm mất thông tin về cookie RFC 2965 và cả về các thuộc tính cookie mới hơn hoặc không chuẩn, chẳng hạn như
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]3
Cảnh báo
Sao lưu cookie của bạn trước khi lưu nếu bạn có cookie mà việc mất/hỏng cookie sẽ gây bất tiện [có một số điểm tinh tế có thể dẫn đến những thay đổi nhỏ trong tệp qua một lần tải/lưu khứ hồi]
Cũng lưu ý rằng các cookie được lưu trong khi Mozilla đang chạy sẽ bị Mozilla ghi đè
A có thể tải và lưu cookie vào đĩa ở định dạng tương thích với định dạng tệp
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]11 của thư viện libwww-perl. Điều này thuận tiện nếu bạn muốn lưu trữ cookie trong tệp mà con người có thể đọc được
Đã thay đổi trong phiên bản 3. 8. Tham số tên tệp hỗ trợ một.
Đối tượng Chính sách Cookie
Các đối tượng thực hiện giao diện có các phương thức sau
Chính sách cookie. set_ok[cookie , yêu cầu]Trả về giá trị boolean cho biết liệu cookie có được chấp nhận từ máy chủ hay không
cookie là một ví dụ. yêu cầu là một đối tượng thực hiện giao diện được xác định bởi tài liệu cho
Chính sách cookie. return_ok[cookie , yêu cầu]Trả về giá trị boolean cho biết có nên trả lại cookie cho máy chủ hay không
cookie là một ví dụ. yêu cầu là một đối tượng thực hiện giao diện được xác định bởi tài liệu cho
Chính sách cookie. domain_return_ok[miền , yêu cầu]Trả lại
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]17 nếu cookie không được trả lại, đã cung cấp miền cookie
Phương pháp này là một tối ưu hóa. Nó loại bỏ nhu cầu kiểm tra mọi cookie với một miền cụ thể [có thể liên quan đến việc đọc nhiều tệp]. Trả về true from và để lại tất cả công việc cho
Nếu trả về true cho miền cookie, được gọi cho đường dẫn cookie. Mặt khác và không bao giờ được gọi cho miền cookie đó. Nếu trả về true, được gọi với chính đối tượng để kiểm tra đầy đủ. Mặt khác, không bao giờ được gọi cho đường dẫn cookie đó
Lưu ý rằng được gọi cho mọi miền cookie, không chỉ cho miền yêu cầu. Ví dụ: chức năng có thể được gọi với cả
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]30 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]31 nếu miền yêu cầu là
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]31. Tương tự đối với
Đối số yêu cầu là tài liệu cho
Chính sách cookie. path_return_ok[đường dẫn , yêu cầu]Trả lại
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]17 nếu cookie không được trả lại, cung cấp đường dẫn cookie
Xem tài liệu cho
Ngoài việc triển khai các phương pháp trên, việc triển khai giao diện cũng phải cung cấp các thuộc tính sau, cho biết giao thức nào sẽ được sử dụng và cách thức. Tất cả các thuộc tính này có thể được gán cho
Chính sách cookie. netscapeTriển khai giao thức Netscape
Chính sách cookie. rfc2965Triển khai giao thức RFC 2965
Chính sách cookie. hide_cookie2Không thêm tiêu đề Cookie2 vào yêu cầu [sự hiện diện của tiêu đề này cho máy chủ biết rằng chúng tôi hiểu cookie RFC 2965]
Cách hữu ích nhất để định nghĩa một lớp là phân lớp từ và ghi đè một số hoặc tất cả các phương thức trên. bản thân nó có thể được sử dụng làm 'chính sách vô hiệu' để cho phép cài đặt và nhận bất kỳ và tất cả cookie [điều này có thể không hữu ích]
Đối tượng Chính sách Cookie Mặc định
Thực hiện các quy tắc tiêu chuẩn để chấp nhận và trả lại cookie
Cả cookie RFC 2965 và Netscape đều được bảo vệ. Xử lý RFC 2965 bị tắt theo mặc định
Cách dễ nhất để cung cấp chính sách của riêng bạn là ghi đè lớp này và gọi các phương thức của nó trong các triển khai được ghi đè của bạn trước khi thêm các kiểm tra bổ sung của riêng bạn
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]2
Ngoài các tính năng cần thiết để triển khai giao diện, lớp này cho phép bạn chặn và cho phép miền thiết lập và nhận cookie. Ngoài ra còn có một số công tắc nghiêm ngặt cho phép bạn thắt chặt một chút các quy tắc giao thức Netscape khá lỏng lẻo [với chi phí chặn một số cookie lành tính]
Một danh sách chặn tên miền và danh sách cho phép được cung cấp [cả hai đều tắt theo mặc định]. Chỉ những miền không có trong danh sách chặn và có trong danh sách cho phép [nếu danh sách cho phép đang hoạt động] mới tham gia cài đặt và quay lại cookie. Sử dụng đối số hàm tạo của tên miền bị chặn và phương thức
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]42 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]43 [và đối số và phương thức tương ứng cho tên miền được phép]. Nếu đặt danh sách cho phép, bạn có thể tắt lại danh sách này bằng cách đặt thành
Miền trong danh sách chặn hoặc cho phép không bắt đầu bằng dấu chấm phải bằng miền cookie để khớp. Ví dụ:
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]45 khớp với mục nhập danh sách chặn của
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]45, nhưng
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]31 thì không. Các miền bắt đầu bằng dấu chấm cũng được khớp với các miền cụ thể hơn. Ví dụ: cả
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]31 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]49 đều khớp với
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]30 [nhưng bản thân
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]45 thì không]. Địa chỉ IP là một ngoại lệ và phải khớp chính xác. Ví dụ: nếu các tên miền bị chặn chứa
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]52 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]53, 192. 168. 1. 2 bị chặn, nhưng 193. 168. 1. 2 không phải
thực hiện các phương pháp bổ sung sau đây
Chính sách Cookie mặc định. tên_miền bị chặn[]Trả về chuỗi các miền bị chặn [dưới dạng Tuple]
Chính sách Cookie mặc định. set_blocked_domains[blocked_domains]Đặt trình tự tên miền bị chặn
Chính sách Cookie mặc định. is_blocked[miền]Trả lại
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu tên miền nằm trong danh sách chặn để đặt hoặc nhận cookieChính sách Cookie mặc định. tên_miền_được phép[]
Return hoặc chuỗi các miền được phép [dưới dạng Tuple]
Chính sách Cookie mặc định. set_allowed_domains[allowed_domains]Đặt trình tự các miền được phép hoặc
Chính sách Cookie mặc định. is_not_allowed[miền]Trả lại
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu miền không có trong danh sách cho phép đặt hoặc nhận cookie
các phiên bản có các thuộc tính sau, tất cả đều được khởi tạo từ các đối số hàm tạo cùng tên và tất cả có thể được gán cho
Chính sách Cookie mặc định. rfc2109_as_netscapeNếu đúng, hãy yêu cầu phiên bản hạ cấp cookie RFC 2109 [tức là. cookie nhận được trong tiêu đề Set-Cookie với thuộc tính cookie phiên bản là 1] thành cookie Netscape bằng cách đặt thuộc tính phiên bản của phiên bản thành 0. Giá trị mặc định là , trong trường hợp này, cookie RFC 2109 bị hạ cấp khi và chỉ khi việc xử lý RFC 2965 bị tắt. Do đó, cookie RFC 2109 bị hạ cấp theo mặc định
Công tắc nghiêm ngặt chung
Chính sách Cookie mặc định. strict_domainKhông cho phép các trang web đặt tên miền hai thành phần với tên miền cấp cao nhất theo mã quốc gia như
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]63,
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]64,
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]65. vân vân. Điều này không hoàn hảo và không được đảm bảo để hoạt động
Công tắc nghiêm ngặt giao thức RFC 2965
Tuân thủ các quy tắc RFC 2965 về giao dịch không thể xác minh [thông thường, giao dịch không thể xác minh là kết quả của chuyển hướng hoặc yêu cầu hình ảnh được lưu trữ trên trang web khác]. Nếu điều này là sai, cookie sẽ không bao giờ bị chặn trên cơ sở có thể xác minh được
Công tắc nghiêm ngặt của giao thức Netscape
Chính sách Cookie mặc định. strict_ns_unverifiableÁp dụng các quy tắc RFC 2965 đối với các giao dịch không thể xác minh ngay cả đối với cookie Netscape
Chính sách Cookie mặc định. strict_ns_domainCờ cho biết mức độ nghiêm ngặt đối với các quy tắc so khớp tên miền đối với cookie Netscape. Xem bên dưới để biết các giá trị được chấp nhận
Chính sách Cookie mặc định. strict_ns_set_initial_đôBỏ qua cookie trong Set-Cookie. tiêu đề có tên bắt đầu bằng
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]66Chính sách Cookie mặc định. strict_ns_set_path
Không cho phép đặt cookie có đường dẫn không khớp với URI yêu cầu đường dẫn
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]67 là một tập hợp các cờ. Giá trị của nó được xây dựng bằng cách kết hợp với nhau [ví dụ:
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]68 có nghĩa là cả hai cờ đều được đặt]Chính sách Cookie mặc định. DomainStrictNoDots
Khi đặt cookie, 'tiền tố máy chủ lưu trữ' không được chứa dấu chấm [ví dụ:.
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]69 không thể đặt cookie cho
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]70, vì
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]71 chứa dấu chấm]Chính sách Cookie mặc định. DomainStrictNonDomain
Các cookie không chỉ định rõ ràng thuộc tính cookie
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]4 chỉ có thể được trả về miền bằng với miền đã đặt cookie [ví dụ:.
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]73 sẽ không được trả lại cookie từ
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]74 không có thuộc tính cookie
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]4]Chính sách Cookie mặc định. MiềnRFC2965Match
Khi đặt cookie, yêu cầu khớp tên miền RFC 2965 đầy đủ
Các thuộc tính sau đây được cung cấp để thuận tiện và là sự kết hợp hữu ích nhất của các cờ trên
Chính sách Cookie mặc định. Miền tự doTương đương với 0 [tức là. tất cả các cờ nghiêm ngặt của miền Netscape ở trên đều bị tắt]
Chính sách Cookie mặc định. DomainStrictTương đương với
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]68
Đối tượng cookie
các phiên bản có các thuộc tính Python gần tương ứng với các thuộc tính cookie tiêu chuẩn được chỉ định trong các tiêu chuẩn cookie khác nhau. Sự tương ứng không phải là trực tiếp, vì có các quy tắc phức tạp để gán giá trị mặc định, vì các thuộc tính cookie
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]2 và
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]0 chứa thông tin tương đương và vì cookie RFC 2109 có thể bị 'hạ cấp' từ phiên bản 1 xuống phiên bản 0 [
Việc gán cho các thuộc tính này không cần thiết trừ những trường hợp hiếm gặp trong một phương thức. Lớp học không thực thi tính nhất quán nội bộ, vì vậy bạn nên biết mình đang làm gì nếu bạn làm điều đó
Cookie. phiên bảnSố nguyên hoặc. Cookie Netscape có 0. Cookie RFC 2965 và RFC 2109 có thuộc tính cookie
import urllib.request from http.cookiejar import CookieJar, DefaultCookiePolicy policy = DefaultCookiePolicy[ rfc2965=True, strict_ns_domain=Policy.DomainStrict, blocked_domains=["ads.net", ".ads.net"]] cj = CookieJar[policy] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]0 là 1. Tuy nhiên, lưu ý rằng có thể 'hạ cấp' cookie RFC 2109 thành cookie Netscape, trong trường hợp đó là 0Cookie. tên
Tên cookie [một chuỗi]
Cookie. giá trịGiá trị cookie [một chuỗi] hoặc
Cookie. cổngChuỗi đại diện cho một cổng hoặc một tập hợp các cổng [ví dụ:. '80' hoặc '80,8080'], hoặc
Cookie. đường dẫnĐường dẫn cookie [một chuỗi, ví dụ:.
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]89]Cookie. an toàn
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu cookie chỉ được trả lại qua kết nối an toànCookie. hết hạn
Ngày hết hạn số nguyên tính bằng giây kể từ kỷ nguyên hoặc. Xem thêm phương pháp
Cookie. hủyimport os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu đây là cookie phiênCookie. bình luận
Nhận xét chuỗi từ máy chủ giải thích chức năng của cookie này hoặc
Cookie. comment_urlURL liên kết đến nhận xét từ máy chủ giải thích chức năng của cookie này hoặc
Cookie. rfc2109import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu cookie này được nhận dưới dạng cookie RFC 2109 [nghĩa là. cookie đến trong tiêu đề Set-Cookie và giá trị của thuộc tính cookie Phiên bản trong tiêu đề đó là 1]. Thuộc tính này được cung cấp vì có thể 'hạ cấp' cookie RFC 2109 thành cookie Netscape, trong trường hợp đó là 0Cookie. port_specified
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu một cổng hoặc tập hợp các cổng được chỉ định rõ ràng bởi máy chủ [trong tiêu đề Set-Cookie / Set-Cookie2]Cookie. domain_specified
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu một tên miền được chỉ định rõ ràng bởi máy chủCookie. domain_initial_dot
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu miền được máy chủ chỉ định rõ ràng bắt đầu bằng dấu chấm [
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]02]
Cookie có thể có thêm các thuộc tính cookie không chuẩn. Chúng có thể được truy cập bằng các phương pháp sau
Cookie. has_nonstandard_attr[tên]Trả lại
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu cookie có thuộc tính cookie được đặt tênCookie. get_nonstandard_attr[tên , mặc định=None]
Nếu cookie có thuộc tính cookie được đặt tên, hãy trả về giá trị của nó. Nếu không, trả về mặc định
Cookie. set_nonstandard_attr[tên , giá trị]Đặt giá trị của thuộc tính cookie được đặt tên
Lớp cũng định nghĩa phương thức sau
Cookie. is_expired[hiện tại=Không có]import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]8 nếu cookie đã qua thời gian mà máy chủ yêu cầu thì nó sẽ hết hạn. Nếu bây giờ được đưa ra [tính bằng giây kể từ kỷ nguyên], hãy trả về xem cookie đã hết hạn vào thời điểm đã chỉ định chưa
ví dụ
Ví dụ đầu tiên cho thấy cách sử dụng phổ biến nhất của
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar[] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]
Ví dụ này minh họa cách mở một URL bằng cookie Netscape, Mozilla hoặc Lynx của bạn [giả sử quy ước Unix/Netscape cho vị trí của tệp cookie]
import os, http.cookiejar, urllib.request cj = http.cookiejar.MozillaCookieJar[] cj.load[os.path.join[os.path.expanduser["~"], ".netscape", "cookies.txt"]] opener = urllib.request.build_opener[urllib.request.HTTPCookieProcessor[cj]] r = opener.open["//example.com/"]
Ví dụ tiếp theo minh họa việc sử dụng. Bật cookie RFC 2965, nghiêm ngặt hơn đối với các miền khi đặt và trả lại cookie Netscape, đồng thời chặn một số miền đặt cookie hoặc trả lại cookie