http.cookiejar --- Xử lý cookie cho khách hàng HTTP

Source code: Lib/http/cookiejar.py


Mô-đun http.cookiejar xác định các lớp để xử lý tự động cookie HTTP. Nó rất hữu ích khi truy cập các trang web yêu cầu các mẩu dữ liệu nhỏ -- cookies -- được đặt trên máy khách bằng phản hồi HTTP từ máy chủ web và 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ý. Việc xử lý RFC 2965 bị tắt theo mặc định. Cookie RFC 2109 được phân tích cú pháp dưới dạng cookie Netscape và sau đó được xử lý dưới dạng 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. http.cookiejar cố gắng tuân theo giao thức cookie Netscape trên thực tế (khác biệt đáng kể so với giao thức được nêu trong đặc tả Netscape ban đầu), bao gồm cả việc lưu ý đến các thuộc tính cookie max-ageport đượ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-CookieSet-Cookie2 (ví dụ: domainexpires) thường được gọi là attributes. Để phân biệt chúng với các thuộc tính Python, tài liệu dành cho mô-đun này sử dụng thuật ngữ cookie-attribute thay thế.

Mô-đun xác định ngoại lệ sau:

exception http.cookiejar.LoadError

Các phiên bản của FileCookieJar đưa ra ngoại lệ này khi không tải được cookie từ một tệp. LoadError là một lớp con của OSError.

Thay đổi trong phiên bản 3.3: LoadError từng là một kiểu con của IOError, hiện là bí danh của OSError.

Các lớp sau đây được cung cấp:

class http.cookiejar.CookieJar(policy=None)

policy là một đối tượng triển khai giao diện CookiePolicy.

Lớp CookieJar 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 phản hồi HTTP. Các phiên bản CookieJar tự động hết hạn cookie chứa 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ừ một tệp hoặc cơ sở dữ liệu.

class http.cookiejar.FileCookieJar(filename=None, delayload=None, policy=None)

policy là một đối tượng triển khai giao diện CookiePolicy. Đố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.

Một CookieJar có thể tải cookie từ và có thể lưu cookie vào một tệp trên đĩa. Cookie được NOT tải từ tệp được đặt tên cho đến khi phương thức load() hoặc revert() được gọi. Các lớp con của lớp này được ghi lại trong phần Các lớp con FileCookieJar và hợp tác với trình duyệt web.

Đ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ợ path-like object.

class http.cookiejar.CookiePolicy

Lớp này chịu trách nhiệm quyết định xem mỗi cookie có được chấp nhận/trả về máy chủ hay không.

class http.cookiejar.DefaultCookiePolicy(blocked_domains=None, allowed_domains=None, netscape=True, rfc2965=False, rfc2109_as_netscape=None, hide_cookie2=False, strict_domain=False, strict_rfc2965_unverifiable=True, strict_ns_unverifiable=False, strict_ns_domain=DefaultCookiePolicy.DomainLiberal, strict_ns_set_initial_dollar=False, strict_ns_set_path=False, secure_protocols=('https', 'wss'))

Đối số của hàm tạo chỉ nên được chuyển dưới dạng đối số từ khóa. blocked_domains là một chuỗi các 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. allowed_domains nếu không phải None, đâ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, httpswss (websocket bảo mật) được coi là các giao thức bảo mật. Đối với tất cả các đối số khác, hãy xem tài liệu về các đối tượng CookiePolicyDefaultCookiePolicy.

DefaultCookiePolicy triển khai 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 có 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 việc xử lý RFC 2965 bị tắt hoặc rfc2109_as_netscapeTrue, thì các cookie RFC 2109 sẽ bị phiên bản CookieJar 'hạ cấp' thành cookie Netscape, bằng cách đặt thuộc tính version của phiên bản Cookie thành 0. DefaultCookiePolicy cũng cung cấp một số tham số để cho phép tinh chỉnh một số chính sách.

class http.cookiejar.Cookie

Lớp này đại diện cho các cookie Netscape, RFC 2109RFC 2965. Người dùng http.cookiejar không thể xây dựng phiên bản Cookie của riêng họ. Thay vào đó, nếu cần, hãy gọi make_cookies() trên phiên bản CookieJar.

Xem thêm

Mô-đun urllib.request

mở URL bằng cách xử lý cookie tự động.

Mô-đun http.cookies

Các lớp cookie HTTP, chủ yếu hữu ích cho mã phía máy chủ. Các mô-đun http.cookiejarhttp.cookies không phụ thuộc vào nhau.

https://curl.se/rfc/cookie_spec.html

Đặc điểm kỹ thuật của giao thức cookie Netscape ban đầu. Mặc dù đây vẫn là giao thức chiếm ưu thế, 'Giao thức cookie Netscape' được triển khai bởi tất cả các trình duyệt chính (và http.cookiejar) chỉ có một chút giống với giao thức được phác thảo trong cookie_spec.html.

RFC 2109 - HTTP Cơ chế quản lý nhà nước

Đã lỗi thời bởi RFC 2965. Sử dụng Set-Cookie với phiên bản=1.

RFC 2965 - HTTP Cơ chế quản lý nhà nước

Giao thức Netscape đã sửa lỗi. Sử dụng Set-Cookie2 thay cho Set-Cookie. Không được sử dụng rộng rãi.

https://kristol.org/cookie/errata.html

Lỗi chưa hoàn thành đối với RFC 2965.

RFC 2964 - Sử dụng quản lý nhà nước HTTP

Đối tượng CookieJar và FileCookieJar

Các đối tượng CookieJar hỗ trợ giao thức iterator để lặp lại các đối tượng Cookie được chứa.

CookieJar có các phương pháp sau:

Thêm tiêu đề Cookie chính xác vào request.

Nếu chính sách cho phép (tức là các thuộc tính rfc2965hide_cookie2 của phiên bản CookiePolicy của CookieJar lần lượt là đúng và sai), thì tiêu đề Cookie2 cũng được thêm vào khi thích hợp.

Đối tượng request (thường là phiên bản urllib.request.Request) phải hỗ trợ các phương thức get_full_url(), has_header(), get_header(), header_items(), add_unredirected_header() và các thuộc tính host, type, unverifiableorigin_req_host như được ghi lại bởi urllib.request.

Thay đổi trong phiên bản 3.3: Đối tượng request cần thuộc tính origin_req_host. Sự phụ thuộc vào phương thức không được dùng nữa get_origin_req_host() đã bị xóa.

CookieJar.extract_cookies(response, request)

Trích xuất cookie từ HTTP response và lưu trữ chúng trong CookieJar, nếu chính sách cho phép.

CookieJar sẽ tìm kiếm các tiêu đề Set-CookieSet-Cookie2 được phép trong đối số response 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 CookiePolicy.set_ok()).

Đối tượng response (thường là kết quả của lệnh gọi tới urllib.request.urlopen() hoặc tương tự) sẽ hỗ trợ phương thức info(), trả về một phiên bản email.message.Message.

Đối tượng request (thường là phiên bản urllib.request.Request) phải hỗ trợ phương thức get_full_url() và các thuộc tính host, unverifiableorigin_req_host, như được ghi lại bởi urllib.request. Yêu cầu được sử dụng để đặt giá trị mặc định cho thuộc tính cookie cũng như để kiểm tra xem cookie có được phép đặt hay không.

Thay đổi trong phiên bản 3.3: Đối tượng request cần thuộc tính origin_req_host. Sự phụ thuộc vào phương thức không được dùng nữa get_origin_req_host() đã bị xóa.

CookieJar.set_policy(policy)

Đặt phiên bản CookiePolicy sẽ được sử dụng.

CookieJar.make_cookies(response, request)

Trả về chuỗi đối tượng Cookie được trích xuất từ đối tượng response.

Xem tài liệu về extract_cookies() để biết các giao diện được yêu cầu của các đối số responserequest.

Đặt Cookie nếu chính sách cho phép làm như vậy.

Đặt Cookie mà không cần kiểm tra chính sách để xem có nên đặt chính sách này hay không.

CookieJar.clear([domain[, 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 domain đó sẽ bị xóa. Nếu được cung cấp hai đối số, các cookie thuộc domain và URL path được chỉ định sẽ bị xóa. Nếu được cung cấp ba đối số thì cookie có domain, pathname được chỉ định sẽ bị xóa.

Tăng KeyError nếu không có cookie phù hợp tồn tại.

CookieJar.clear_session_cookies()

Loại bỏ tất cả cookie phiên.

Loại bỏ tất cả các cookie chứa có thuộc tính discard thực sự (thường là do chúng không có thuộc tính cookie max-age hoặc expires hoặc thuộc tính cookie discard 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 save() 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 thực sự.

FileCookieJar thực hiện các phương pháp bổ sung sau:

FileCookieJar.save(filename=None, ignore_discard=False, ignore_expires=False)

Lưu cookie vào một tập tin.

Lớp cơ sở này tăng NotImplementedError. Các lớp con có thể không thực hiện phương thức này.

filename là tên file lưu cookie. Nếu filename không được chỉ định, self.filename sẽ được sử dụng (có mặc định là giá trị được truyền cho hàm tạo, nếu có); nếu self.filenameNone, ValueError được nâng lên.

ignore_discard: lưu cả những cookie đã được thiết lập để loại bỏ. ignore_expires: lưu cả những cookie đã hết hạn

Tệp sẽ bị ghi đè nếu nó đã tồn tại, do đó sẽ xóa sạch tất cả cookie chứa trong đó. Cookie đã lưu có thể được khôi phục sau bằng phương pháp load() hoặc revert().

FileCookieJar.load(filename=None, ignore_discard=False, ignore_expires=False)

Tải cookie từ một tập tin.

Cookie cũ được giữ lại trừ khi bị ghi đè bởi cookie mới tải.

Các đối số giống như đối với save().

Tệp được đặt tên phải ở định dạng mà lớp có thể hiểu được, nếu không LoadError sẽ được nâng lên. Ngoài ra, OSError có thể được nâng lên, chẳng hạn nếu tệp không tồn tại.

Thay đổi trong phiên bản 3.3: IOError trước đây được nâng lên, bây giờ nó là bí danh của OSError.

FileCookieJar.revert(filename=None, ignore_discard=False, ignore_expires=False)

Xóa tất cả cookie và tải lại cookie từ tệp đã lưu.

revert() có thể đưa ra các ngoại lệ tương tự như load(). Nếu có lỗi, trạng thái của đối tượng sẽ không bị thay đổi.

Các phiên bản FileCookieJar có các thuộc tính công khai sau:

FileCookieJar.filename

Tê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.delayload

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à 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). Đối tượng CookieJar có thể bỏ qua nó. Không có lớp FileCookieJar nào có trong thư viện tiêu chuẩn tải cookie một cách lười biếng.

Các lớp con FileCookieJar và hợp tác với trình duyệt web

Các lớp con CookieJar sau đây được cung cấp để đọc và viết.

class http.cookiejar.MozillaCookieJar(filename=None, delayload=None, policy=None)

Một FileCookieJar có thể tải và lưu cookie vào đĩa ở định dạng tệp Mozilla cookies.txt (cũng được sử dụng bởi trình duyệt Curl, Lynx và Netscape).

Ghi chú

Điều này sẽ làm mất thông tin về cookie RFC 2965 cũng như về các thuộc tính cookie mới hơn hoặc không chuẩn, chẳng hạn như port.

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 sẽ gây bất tiện (có một số chi tiết có thể dẫn đến những thay đổi nhỏ trong tệp khi 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 đè.

class http.cookiejar.LWPCookieJar(filename=None, delayload=None, policy=None)

Một FileCookieJar 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 Set-Cookie3 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 một 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ợ path-like object.

Đối tượng Chính sách Cookie

Các đối tượng thực hiện giao diện CookiePolicy có các phương thức sau:

CookiePolicy.set_ok(cookie, request)

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 phiên bản Cookie. request là một đối tượng triển khai giao diện được xác định bởi tài liệu dành cho CookieJar.extract_cookies().

CookiePolicy.return_ok(cookie, request)

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 phiên bản Cookie. request là một đối tượng triển khai giao diện được xác định bởi tài liệu dành cho CookieJar.add_cookie_header().

CookiePolicy.domain_return_ok(domain, request)

Trả về False nếu không nên trả lại cookie, với miền cookie được cung cấp.

Phương pháp này là một sự tối ưu hóa. Nó loại bỏ nhu cầu kiểm tra mọi cookie với một tên miền cụ thể (có thể liên quan đến việc đọc nhiều tệp). Trả về true từ domain_return_ok()path_return_ok() để lại tất cả công việc cho return_ok().

Nếu domain_return_ok() trả về true cho miền cookie thì path_return_ok() được gọi cho đường dẫn cookie. Nếu không, path_return_ok()return_ok() không bao giờ được gọi cho miền cookie đó. Nếu path_return_ok() trả về true, return_ok() sẽ được gọi với chính đối tượng Cookie để kiểm tra đầy đủ. Nếu không, return_ok() không bao giờ được gọi cho đường dẫn cookie đó.

Lưu ý rằng domain_return_ok() được gọi cho mọi miền cookie, không chỉ cho miền request. Ví dụ: hàm có thể được gọi với cả ".example.com""www.example.com" nếu miền yêu cầu là "www.example.com". Điều tương tự cũng xảy ra với path_return_ok().

Đối số request được ghi lại cho return_ok().

CookiePolicy.path_return_ok(path, request)

Trả về False nếu không trả về cookie, với đường dẫn cookie đã cho.

Xem tài liệu về domain_return_ok().

Ngoài việc triển khai các phương pháp trên, việc triển khai giao diện CookiePolicy cũng phải cung cấp các thuộc tính sau, cho biết nên sử dụng giao thức nào và sử dụng như thế nào. Tất cả các thuộc tính này có thể được gán cho.

CookiePolicy.netscape

Triển khai giao thức Netscape.

CookiePolicy.rfc2965

Triển khai giao thức RFC 2965.

CookiePolicy.hide_cookie2

Khô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 để xác định lớp CookiePolicy là phân lớp từ DefaultCookiePolicy và ghi đè một số hoặc tất cả các phương thức trên. Bản thân CookiePolicy có thể được sử dụng như một 'chính sách vô hiệu' để cho phép cài đặt và nhận bất kỳ và tất cả cookie nào (điều này có thể không hữu ích).

Đối tượng chính sách cookie mặc định

Triển khai 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ệ. Việc 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 quá trình triển khai được ghi đè trước khi thêm các bước kiểm tra bổ sung của riêng bạn:

nhập http.cookiejar
lớp MyCookiePolicy(http.cookiejar.DefaultCookiePolicy):
    def set_ok(tự, cookie, yêu cầu):
        nếu không http.cookiejar.DefaultCookiePolicy.set_ok(self, cookie, request):
            trả về Sai
        nếu i_dont_want_to_store_this_cookie(cookie):
            trả về Sai
        trả về Đúng

Ngoài các tính năng cần thiết để triển khai giao diện CookiePolicy, lớp này cho phép bạn chặn và cho phép các 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 các quy tắc giao thức Netscape khá lỏng lẻo một chút (với chi phí chặn một số cookie lành tính).

Danh sách chặn và danh sách cho phép miền được cung cấp (cả hai đều tắt theo mặc định). Chỉ các 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 cookie và quay lại. Sử dụng đối số hàm tạo blocked_domains cũng như các phương thức blocked_domains()set_blocked_domains() (cũng như đối số và phương thức tương ứng cho allowed_domains). Nếu bạn đặ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 None.

Các 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 để được so khớp. Ví dụ: "example.com" khớp với mục nhập danh sách chặn của "example.com", nhưng "www.example.com" 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ả "www.example.com""www.coyote.example.com" đều khớp với ".example.com" (nhưng bản thân "example.com" 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 Block_domains chứa "192.168.1.2"".168.1.2" thì 192.168.1.2 bị chặn nhưng 193.168.1.2 thì không.

DefaultCookiePolicy thực hiện các phương pháp bổ sung sau:

DefaultCookiePolicy.blocked_domains()

Trả về chuỗi các miền bị chặn (dưới dạng tuple).

DefaultCookiePolicy.set_blocked_domains(blocked_domains)

Đặt trình tự các tên miền bị chặn.

DefaultCookiePolicy.is_blocked(domain)

Trả về True nếu domain nằm trong danh sách chặn để cài đặt hoặc nhận cookie.

DefaultCookiePolicy.allowed_domains()

Trả về None hoặc chuỗi các miền được phép (dưới dạng một bộ dữ liệu).

DefaultCookiePolicy.set_allowed_domains(allowed_domains)

Đặt chuỗi các tên miền được phép hoặc None.

DefaultCookiePolicy.is_not_allowed(domain)

Trả về True nếu domain không có trong danh sách cho phép cài đặt hoặc nhận cookie.

Các phiên bản DefaultCookiePolicy 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ó cùng tên và tất cả đều có thể được gán cho.

DefaultCookiePolicy.rfc2109_as_netscape

Nếu đúng, hãy yêu cầu phiên bản CookieJar hạ cấp cookie RFC 2109 (tức là các cookie nhận được trong tiêu đề Set-Cookie có thuộc tính cookie phiên bản là 1) xuống cookie Netscape bằng cách đặt thuộc tính phiên bản của phiên bản Cookie thành 0. Giá trị mặc định là None, trong trường hợp đó, cookie RFC 2109 bị hạ cấp khi và chỉ khi việc xử lý RFC 2965 bị tắt. Do đó, theo mặc định, cookie RFC 2109 bị hạ cấp.

Công tắc nghiêm ngặt chung:

DefaultCookiePolicy.strict_domain

Không cho phép các trang web đặt miền hai thành phần với các miền cấp cao nhất theo mã quốc gia như .co.uk, .gov.uk, .co.nz.etc. Điều này còn lâu mới hoàn hảo và không được đảm bảo sẽ hoạt động!

Công tắc nghiêm ngặt của giao thức RFC 2965:

DefaultCookiePolicy.strict_rfc2965_unverifiable

Tuân theo quy tắc RFC 2965 đối với các giao dịch không thể xác minh (thông thường, giao dịch không thể xác minh là giao dịch do chuyển hướng hoặc yêu cầu về hình ảnh được lưu trữ trên trang web khác). Nếu điều này là sai, cookie sẽ bị never chặn trên cơ sở có thể xác minh được

Chuyển đổi mức độ nghiêm ngặt của giao thức Netscape:

DefaultCookiePolicy.strict_ns_unverifiable

Áp dụng quy tắc RFC 2965 cho các giao dịch không thể xác minh ngay cả đối với cookie Netscape.

DefaultCookiePolicy.strict_ns_domain

Cờ cho biết mức độ nghiêm ngặt của 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ó thể chấp nhận được.

DefaultCookiePolicy.strict_ns_set_initial_dollar

Bỏ qua cookie trong Set-Cookie: tiêu đề có tên bắt đầu bằng '$'.

DefaultCookiePolicy.strict_ns_set_path

Không cho phép đặt cookie có đường dẫn không khớp với yêu cầu URI.

strict_ns_domain là một tập hợp các lá cờ. Giá trị của nó được xây dựng bằng cách kết hợp or-ing (ví dụ: DomainStrictNoDots|DomainStrictNonDomain có nghĩa là cả hai cờ đều được đặt).

DefaultCookiePolicy.DomainStrictNoDots

Khi đặt cookie, 'tiền tố máy chủ' không được chứa dấu chấm (ví dụ: www.foo.bar.com không thể đặt cookie cho .bar.com, vì www.foo có chứa dấu chấm).

DefaultCookiePolicy.DomainStrictNonDomain

Những cookie không chỉ định rõ ràng thuộc tính cookie domain chỉ có thể được trả về miền bằng với miền đã đặt cookie (ví dụ: spam.example.com sẽ không được trả về cookie từ example.com không có thuộc tính cookie domain).

DefaultCookiePolicy.DomainRFC2965Match

Khi cài đặt cookie, yêu cầu phải khớp tên miền RFC 2965 đầy đủ.

Các thuộc tính sau đượ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:

DefaultCookiePolicy.DomainLiberal

Tươ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 đã bị tắt).

DefaultCookiePolicy.DomainStrict

Tương đương với DomainStrictNoDots|DomainStrictNonDomain.

Ví dụ

Ví dụ đầu tiên cho thấy cách sử dụng phổ biến nhất của http.cookiejar:

nhập http.cookiejar, urllib.request
cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")

Ví dụ này minh họa cách mở URL bằng cookie Netscape, Mozilla hoặc Lynx của bạn (giả sử quy ước Unix/Netscape về vị trí của tệp cookie):

nhập hệ điều hành, 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("http://example.com/")

Ví dụ tiếp theo minh họa việc sử dụng DefaultCookiePolicy. Bật cookie RFC 2965, nghiêm ngặt hơn về tên miền khi cài đặt và trả lại cookie Netscape, đồng thời chặn một số tên miền đặt cookie hoặc yêu cầu trả lại chúng:

nhập urllib.request
từ http.cookiejar nhập CookieJar, DefaultCookiePolicy
chính sách = DefaultCookiePolicy(
    rfc2965=Đúng, strict_ns_domain=Chính sách.DomainStrict,
    bị chặn_domains=["ads.net", ".ads.net"])
cj = CookieJar(chính sách)
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")