Làm cách nào để lấy giá trị cookie từ trình duyệt Python?

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ải

Cá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 cookie

Lớ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ách

lớ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ô-đun

Mở URL với xử lý cookie tự động

mô-đun

Cá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. html

Thô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/"]
52

RFC 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 HTTP

Giao 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. html

Lỗ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ệp

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. 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 đè

lớp http. lọ đựng bánh quy. LWPCookieJar[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ươ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. netscape

Triển khai giao thức Netscape

Chính sách cookie. rfc2965

Triển khai giao thức RFC 2965

Chính sách cookie. 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 để đị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 cookie

Chí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_netscape

Nế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_domain

Khô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

Chính sách Cookie mặc định. strict_rfc2965_unverifiable

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_domain

Cờ 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/"]
66

Chí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ự do

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 đều bị tắt]

Chính sách Cookie mặc định. DomainStrict

Tươ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ản

Số 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à 0

Cookie. tên

Tên cookie [một chuỗi]

Cookie. giá trị

Giá trị cookie [một chuỗi] hoặc

Cookie. cổng

Chuỗ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àn

Cookie. 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ủy

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 đây là cookie phiên

Cookie. 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_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

Cookie. rfc2109

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 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à 0

Cookie. 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ên

Cookie. 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

Chủ Đề