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-age và port đượ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ụ: domain và expires) 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.LoadErrorlà một lớp con củaOSError.
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
CookieJarlư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ảnCookieJartự độ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
CookieJarcó 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ứcload()hoặcrevert()đượ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, https và wss (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ượngCookiePolicyvàDefaultCookiePolicy.DefaultCookiePolicytriể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ặcrfc2109_as_netscapelàTrue, thì các cookie RFC 2109 sẽ bị phiên bảnCookieJar'hạ cấp' thành cookie Netscape, bằng cách đặt thuộc tínhversioncủa phiên bảnCookiethành 0.DefaultCookiePolicycũ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 2109 và RFC 2965. Người dùng
http.cookiejarkhông thể xây dựng phiên bảnCookiecủa riêng họ. Thay vào đó, nếu cần, hãy gọimake_cookies()trên phiên bảnCookieJar.
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.cookiejarvàhttp.cookieskhô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 trongcookie_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:
- CookieJar.add_cookie_header(request)¶
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
rfc2965vàhide_cookie2của phiên bảnCookiePolicycủaCookieJarlầ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ứcget_full_url(),has_header(),get_header(),header_items(),add_unredirected_header()và các thuộc tínhhost,type,unverifiablevàorigin_req_hostnhư được ghi lại bởiurllib.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ữaget_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.CookieJarsẽ tìm kiếm các tiêu đề Set-Cookie và Set-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ứcCookiePolicy.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ứcinfo(), trả về một phiên bảnemail.message.Message.Đối tượng request (thường là phiên bản
urllib.request.Request) phải hỗ trợ phương thứcget_full_url()và các thuộc tínhhost,unverifiablevàorigin_req_host, như được ghi lại bởiurllib.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ữaget_origin_req_host()đã bị xóa.
- CookieJar.set_policy(policy)¶
Đặt phiên bản
CookiePolicysẽ đượ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ố response và request.
- CookieJar.set_cookie(cookie)¶
Đặt
Cookiemà 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, path và name được chỉ định sẽ bị xóa.
Tăng
KeyErrornế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
discardthực sự (thường là do chúng không có thuộc tính cookiemax-agehoặcexpireshoặc thuộc tính cookiediscardrõ 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.filenamesẽ được sử dụng (có mặc định là giá trị được truyền cho hàm tạo, nếu có); nếuself.filenamelàNone,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ặcrevert().
- 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
LoadErrorsẽ được nâng lên. Ngoài ra,OSErrorcó thể được nâng lên, chẳng hạn nếu tệp không tồn tại.
- 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
CookieJarcó thể bỏ qua nó. Không có lớpFileCookieJarnà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
FileCookieJarcó thể tải và lưu cookie vào đĩa ở định dạng tệp Mozillacookies.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
FileCookieJarcó thể tải và lưu cookie vào đĩa ở định dạng tương thích với định dạng tệpSet-Cookie3củ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 choCookieJar.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 choCookieJar.add_cookie_header().
- CookiePolicy.domain_return_ok(domain, request)¶
Trả về
Falsenế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()vàpath_return_ok()để lại tất cả công việc choreturn_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()vàreturn_ok()không bao giờ được gọi cho miền cookie đó. Nếupath_return_ok()trả về true,return_ok()sẽ được gọi với chính đối tượngCookieđể 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"và"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ớipath_return_ok().Đối số request được ghi lại cho
return_ok().
- CookiePolicy.path_return_ok(path, request)¶
Trả về
Falsenế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.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() và 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" và "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" và ".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ề
Truenếu domain nằm trong danh sách chặn để cài đặt hoặc nhận cookie.
- DefaultCookiePolicy.allowed_domains()¶
Trả về
Nonehoặ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ề
Truenế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
CookieJarhạ 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ảnCookiethà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.comkhông thể đặt cookie cho.bar.com, vìwww.foocó chứa dấu chấm).
- DefaultCookiePolicy.DomainStrictNonDomain¶
Những cookie không chỉ định rõ ràng thuộc tính cookie
domainchỉ có thể được trả về miền bằng với miền đã đặt cookie (ví dụ:spam.example.comsẽ không được trả về cookie từexample.comkhông có thuộc tính cookiedomain).
- 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.
Đối tượng cookie¶
Các phiên bản Cookie 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à một, vì có các quy tắc phức tạp để gán giá trị mặc định, vì thuộc tính cookie max-age và expires chứa thông tin tương đương và vì cookie RFC 2109 có thể bị http.cookiejar 'hạ cấp' từ cookie phiên bản 1 xuống phiên bản 0 (Netscape).
Việc gán cho các thuộc tính này không cần thiết ngoại trừ những trường hợp hiếm gặp trong phương thức CookiePolicy. Lớp này 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 làm điều đó.
- Cookie.version¶
Số nguyên hoặc
None. Cookie Netscape cóversion0. Cookie RFC 2965 và RFC 2109 có thuộc tính cookieversionlà 1. Tuy nhiên, lưu ý rằnghttp.cookiejarcó thể 'hạ cấp' cookie RFC 2109 xuống cookie Netscape, trong trường hợp đóversionlà 0.
- Cookie.name¶
Tên cookie (một chuỗi).
- Cookie.domain¶
Miền cookie (một chuỗi).
- Cookie.path¶
Đường dẫn cookie (một chuỗi, ví dụ:
'/acme/rocket_launchers').
- Cookie.secure¶
Truenếu cookie chỉ được trả về qua kết nối an toàn.
- Cookie.expires¶
Ngày hết hạn số nguyên tính bằng giây kể từ kỷ nguyên hoặc
None. Xem thêm phương phápis_expired().
- Cookie.discard¶
Truenếu đây là cookie phiên.
- Cookie.comment_url¶
URL 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
None.
- Cookie.rfc2109¶
Truenếu cookie này được nhận dưới dạng cookie RFC 2109 (tức 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ìhttp.cookiejarcó thể 'hạ cấp' cookie RFC 2109 xuống cookie Netscape, trong trường hợp đóversionlà 0.
- Cookie.port_specified¶
Truenếu một cổng hoặc tập hợp các cổng được máy chủ chỉ định rõ ràng (trong tiêu đề Set-Cookie / Set-Cookie2).
- Cookie.domain_specified¶
Truenếu miền được máy chủ chỉ định rõ ràng.
- Cookie.domain_initial_dot¶
Truenếu miền được máy chủ chỉ định rõ ràng bắt đầu bằng dấu chấm ('.').
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(name)¶
Trả về
Truenếu cookie có thuộc tính cookie được đặt tên.
- Cookie.get_nonstandard_attr(name, default=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, hãy trả về default.
- Cookie.set_nonstandard_attr(name, value)¶
Đặt giá trị của thuộc tính cookie được đặt tên.
Lớp Cookie cũng định nghĩa phương thức sau:
- Cookie.is_expired(now=None)¶
Truenếu cookie đã vượt quá thời gian mà máy chủ yêu cầu hết hạn. Nếu now được cung cấp (tính bằng giây kể từ Kỷ nguyên), hãy trả về xem cookie đã hết hạn tại thời điểm đã chỉ định hay chưa.
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/")