Python

http.cookiejar — HTTP 클라이언트를 위한 쿠키 처리

소스 코드: Lib/http/cookiejar.py


http.cookiejar 모듈은 HTTP 쿠키를 자동으로 처리하기 위한 클래스들을 정의합니다. 이 모듈은 웹 서버의 HTTP 응답에 의해 클라이언트 머신에 설정되고 이후의 HTTP 요청에서 서버로 다시 반환되는 작은 데이터 조각인 쿠키(cookies) 가 필요한 웹 사이트에 접속할 때 유용합니다.

일반 Netscape 쿠키 프로토콜과 RFC 2965 에 정의된 프로토콜이 모두 처리됩니다. RFC 2965 처리는 기본적으로 비활성화되어 있습니다. RFC 2109 쿠키는 Netscape 쿠키로 파싱되며, 이후 적용되는 ‘정책’에 따라 Netscape 또는 RFC 2965 쿠키로 취급됩니다. 인터넷상의 대다수 쿠키가 Netscape 쿠키임을 유의하십시오. http.cookiejar 은 RFC 2965에서 도입된 max-ageport 쿠키 속성을 포함하여, (원래 Netscape 사양과 크게 다르지만) 사실상의 표준인 Netscape 쿠키 프로토콜을 따르도록 시도합니다.

참고

Set-CookieSet-Cookie2 헤더에서 발견되는 다양한 이름 붙은 파라미터(예를 들어, domainexpires)는 관례적으로 어트리뷰트(attributes) 로 지칭됩니다. Python 어트리뷰트와 구분하기 위해, 이 모듈의 설명서에서는 대신 쿠키 어트리뷰트(cookie-attribute) 라는 용어를 사용합니다.

모듈은 다음 예외를 정의합니다:

exception http.cookiejar.LoadError

FileCookieJar 인스턴스는 파일에서 쿠키를 로드하지 못하면 이 예외를 발생시킵니다. LoadErrorOSError의 서브 클래스입니다.

버전 3.3에서 변경: 이전에는 LoadErrorIOError의 서브 형이었습니다. 이제는 OSError의 별칭입니다.

다음과 같은 클래스가 제공됩니다:

class http.cookiejar.CookieJar(policy=None)

policyCookiePolicy 인터페이스를 구현하는 객체입니다.

CookieJar 클래스는 HTTP 쿠키를 저장합니다. HTTP 요청에서 쿠키를 추출하고, HTTP 응답으로 반환합니다. 필요하면 CookieJar 인스턴스는 포함된 쿠키를 자동으로 만료합니다. 서브 클래스는 파일이나 데이터베이스에서 쿠키를 저장하고 검색하는 역할도 합니다.

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

policyCookiePolicy 인터페이스를 구현하는 객체입니다. 다른 인자에 대해서는, 해당 어트리뷰트의 설명서를 참조하십시오.

디스크의 파일에서 쿠키를 로드하고 아마도 파일에 쿠키를 저장할 수 있는 CookieJar. load()revert() 메서드가 호출될 때까지 이름이 지정된 파일에서 쿠키가 로드되지 않습니다. 이 클래스의 서브 클래스는 FileCookieJar 서브 클래스와 웹 브라우저와의 협력 섹션에 설명되어 있습니다.

이 클래스는 직접 초기화해서는 안 되며, 대신 아래의 하위 클래스를 사용하십시오.

버전 3.8에서 변경: filename 매개 변수는 경로류 객체를 지원합니다.

class http.cookiejar.CookiePolicy

이 클래스는 각 쿠키가 서버에서 수락되고 서버로 반환되어야 하는지를 결정하는 역할을 맡습니다.

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'))

생성자 인자는 키워드 인자로만 전달해야 합니다. blocked_domains 는 쿠키를 수락하지도 쿠키를 반환하지도 않을 도메인 이름의 시퀀스입니다. allowed_domainsNone 이 아니면, 이는 쿠키를 수락하고 반환하는 유일한 도메인들의 시퀀스입니다. secure_protocols 는 보안 쿠키를 추가할 수 있는 프로토콜의 시퀀스입니다. 기본적으로 httpswss (보안 웹소켓)은 보안 프로토콜로 간주됩니다. 다른 모든 인자에 대해서는 CookiePolicyDefaultCookiePolicy 객체에 대한 설명서를 참조하십시오.

DefaultCookiePolicy 는 Netscape 및 RFC 2965 쿠키를 위한 표준 수락/거부 규칙을 구현합니다. 기본적으로, RFC 2109 쿠키(즉, version 쿠키 어트리뷰트가 1인 Set-Cookie 헤더로 수신된 쿠키)는 RFC 2965 규칙에 따라 처리됩니다. 그러나, RFC 2965 처리가 꺼져 있거나 rfc2109_as_netscapeTrue 이면, CookieJar 인스턴스가 Cookie 인스턴스의 version 어트리뷰트를 0으로 설정하여 RFC 2109 쿠키를 Netscape 쿠키로 ‘다운그레이드’합니다. DefaultCookiePolicy 는 정책을 미세 조정할 수 있는 몇 가지 매개변수도 제공합니다.

class http.cookiejar.Cookie

이 클래스는 Netscape, RFC 2109, 그리고 RFC 2965 쿠키를 나타냅니다. http.cookiejar 사용자가 직접 Cookie 인스턴스를 생성하는 것은 권장되지 않습니다. 대신, 필요한 경우 CookieJar 인스턴스에서 make_cookies() 를 호출하십시오.

더 보기

모듈 urllib.request

자동 쿠키 처리가 지원되는 URL 열기.

모듈 http.cookies

주로 서버 측 코드에 유용한 HTTP 쿠키 클래스입니다. http.cookiejarhttp.cookies 모듈은 서로 의존하지 않습니다.

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

원래 Netscape 쿠키 프로토콜의 명세입니다. 이 프로토콜이 여전히 지배적이지만, 모든 주요 브라우저(및 http.cookiejar)에서 구현된 ‘Netscape 쿠키 프로토콜’은 cookie_spec.html 에 기술된 내용과 어느 정도 유사할 뿐입니다.

RFC 2109 - HTTP 상태 관리 메커니즘

RFC 2965로 개정되었습니다. version=1 인 Set-Cookie를 사용합니다.

RFC 2965 - HTTP 상태 관리 메커니즘

버그가 수정된 Netscape 프로토콜. Set-Cookie 대신 Set-Cookie2를 사용합니다. 널리 사용되지 않습니다.

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

완료되지 않은 RFC 2965의 정오표.

RFC 2964 - HTTP 상태 관리 사용

CookieJar 및 FileCookieJar 객체

CookieJar 객체는 포함된 Cookie 객체를 이터레이트 하기 위한 이터레이터 프로토콜을 지원합니다.

CookieJar에는 다음과 같은 메서드가 있습니다:

request에 올바른 Cookie 헤더를 추가합니다.

정책이 허용하는 경우(즉, CookieJarCookiePolicy 인스턴스의 rfc2965 어트리뷰트가 참이고 hide_cookie2 어트리뷰트가 거짓인 경우), 적절할 때 Cookie2 헤더도 추가됩니다.

request 객체(일반적으로 urllib.request.Request 인스턴스)는 urllib.request 에 정의된 바와 같이 get_full_url(), has_header(), get_header(), header_items(), add_unredirected_header() 메서드와 host, type, unverifiable, origin_req_host 어트리뷰트를 지원해야 합니다.

버전 3.3에서 변경: request 객체는 origin_req_host 어트리뷰트가 필요합니다. 폐지된 메서드인 get_origin_req_host() 에 대한 의존성이 제거되었습니다.

CookieJar.extract_cookies(response, request)

HTTP response에서 쿠키를 추출하여 정책이 허용하면 CookieJar에 저장합니다.

CookieJarresponse 인자에서 수락할 수 있는 Set-CookieSet-Cookie2 헤더를 찾고, 쿠키를 적절하게 저장합니다 (CookiePolicy.set_ok() 메서드의 승인에 따라).

response 객체(일반적으로 urllib.request.urlopen() 호출 결과 또는 이와 유사한 것)는 email.message.Message 인스턴스를 반환하는 info() 메서드를 지원해야 합니다.

request 객체(일반적으로 urllib.request.Request 인스턴스)는 urllib.request 에 정의된 바와 같이 get_full_url() 메서드와 host, unverifiable, origin_req_host 어트리뷰트를 지원해야 합니다. request는 쿠키가 설정될 수 있는지 확인하는 것뿐만 아니라 쿠키 어트리뷰트의 기본값을 설정하는 데도 사용됩니다.

버전 3.3에서 변경: request 객체는 origin_req_host 어트리뷰트가 필요합니다. 폐지된 메서드인 get_origin_req_host() 에 대한 의존성이 제거되었습니다.

CookieJar.set_policy(policy)

사용할 CookiePolicy 인스턴스를 설정합니다.

CookieJar.make_cookies(response, request)

response 객체에서 추출한 Cookie 객체의 시퀀스를 반환합니다.

responserequest 인자에 필요한 인터페이스는 extract_cookies() 설명서를 참조하십시오.

정책이 그래도 좋다고 한다면 Cookie를 설정합니다.

설정할 수 있는지 정책을 확인하지 않고, Cookie를 설정합니다.

CookieJar.clear([domain[, path[, name]]])

일부 쿠키를 지웁니다.

인자 없이 호출되면, 모든 쿠키를 지웁니다. 단일 인자가 제공되면, 해당 domain에 속하는 쿠키만 제거됩니다. 두 개의 인자가 제공되면, 지정된 domain과 URL path에 속하는 쿠키가 제거됩니다. 세 개의 인자가 제공되면, 지정된 domain, pathname을 갖는 쿠키가 제거됩니다.

일치하는 쿠키가 없으면 KeyError를 발생시킵니다.

CookieJar.clear_session_cookies()

모든 세션 쿠키를 폐기합니다.

true인 discard 어트리뷰트를 가진 모든 쿠키를 제거합니다(일반적으로 max-age 또는 expires 쿠키 어트리뷰트가 없거나 명시적인 discard 쿠키 어트리뷰트가 있는 경우). 대화형 브라우저의 경우, 세션의 종료는 보통 브라우저 창을 닫는 시점과 일치합니다.

ignore_discard 인자를 true로 전달하여 별도로 요청하지 않는 한, save() 메서드는 세션 쿠키를 저장하지 않습니다.

FileCookieJar는 다음과 같은 추가 메서드를 구현합니다:

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

쿠키를 파일에 저장합니다.

이 베이스 클래스는 NotImplementedError를 발생시킵니다. 서브 클래스는 이 메서드를 구현하지 않은 채로 둘 수 있습니다.

filename 은 쿠키를 저장할 파일의 이름입니다. filename 이 지정되지 않은 경우, self.filename 을 사용합니다(기본값은 생성자에 전달된 값이 있다면 해당 값이며, 없습니다). 만약 self.filenameNone 이면 ValueError 가 발생합니다.

ignore_discard: 폐기되는 것으로 설정된 쿠키도 저장합니다. ignore_expires: 만료된 쿠키도 저장합니다

파일이 이미 존재하면, 파일을 덮어써서, 파일에 포함된 모든 쿠키를 지웁니다. 저장된 쿠키는 나중에 load()revert() 메서드를 사용하여 복원할 수 있습니다.

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

파일에서 쿠키를 로드합니다.

새로 로드한 쿠키가 덮어쓰지 않는 한 오래된 쿠키는 유지됩니다.

인자는 save()와 같습니다.

명명된 파일은 클래스가 이해하는 형식이어야 하고, 그렇지 않으면 LoadError가 발생합니다. 또한, 예를 들어 파일이 존재하지 않으면, OSError가 발생할 수 있습니다.

버전 3.3에서 변경: IOError가 발생했었지만, 이제는 OSError의 별칭입니다.

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

모든 쿠키를 지우고 저장된 파일에서 쿠키를 다시 로드합니다.

revert()load()와 같은 예외를 발생시킬 수 있습니다. 실패가 일어나면, 객체 상태는 변경되지 않습니다.

FileCookieJar 인스턴스에는 다음과 같은 공용 어트리뷰트가 있습니다:

FileCookieJar.filename

쿠키를 보관할 기본 파일의 파일명. 이 어트리뷰트는 대입할 수 있습니다.

FileCookieJar.delayload

참이면, 디스크에서 쿠키를 천천히(lazily) 로드합니다. 이 어트리뷰트는 대입하지 않아야 합니다. (디스크의 쿠키가 변경되지 않는 한) 성능에만 영향을 미칠 뿐 동작을 바꾸지는 않기 때문에, 이것은 힌트일 뿐입니다. CookieJar 객체는 이를 무시할 수 있습니다. 표준 라이브러리에 포함된 FileCookieJar 클래스는 아무것도 쿠키를 천천히 로드하지 않습니다.

FileCookieJar 서브 클래스와 웹 브라우저와의 협력

다음 CookieJar 서브 클래스는 읽기와 쓰기를 위해 제공됩니다.

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

Mozilla cookies.txt 파일 형식(curl, Lynx 및 Netscape 브라우저에서도 사용됩니다)으로 디스크에서 쿠키를 로드하고 저장할 수 있는 FileCookieJar.

참고

RFC 2965 쿠키에 대한 정보와, port 같은 최신이나 비표준 쿠키 어트리뷰트에 대한 정보가 손실됩니다.

경고

손실/손상이 불편한 쿠키가 있다면 저장하기 전에 쿠키를 백업하십시오 (로드/저장 왕복으로 인해 파일이 약간 변경될 수 있는 미묘한 부분이 있습니다).

또한 Mozilla가 실행되는 동안 저장된 쿠키는 Mozilla에 의해 방해를 받음에 유의하십시오.

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

libwww-perl 라이브러리의 Set-Cookie3 파일 형식과 호환되는 형식으로 쿠키를 디스크에서 로드하고 저장할 수 있는 FileCookieJar. 사람이 읽을 수 있는 파일에 쿠키를 저장하려는 경우에 편리합니다.

버전 3.8에서 변경: filename 매개 변수는 경로류 객체를 지원합니다.

CookiePolicy 객체

CookiePolicy 인터페이스를 구현하는 객체에는 다음과 같은 메서드가 있습니다:

CookiePolicy.set_ok(cookie, request)

서버에서 쿠키를 수락해야 하는지를 나타내는 불리언 값을 반환합니다.

cookieCookie 인스턴스입니다. requestCookieJar.extract_cookies() 설명서에서 정의한 인터페이스를 구현하는 객체입니다.

CookiePolicy.return_ok(cookie, request)

쿠키를 서버로 반환해야 하는지를 나타내는 불리언 값을 반환합니다.

cookieCookie 인스턴스입니다. requestCookieJar.add_cookie_header() 설명서에서 정의한 인터페이스를 구현하는 객체입니다.

CookiePolicy.domain_return_ok(domain, request)

주어진 쿠키 도메인(domain)에서, 쿠키를 반환하지 않아야 하면 False를 반환합니다.

이 메서드는 최적화입니다. 특정 도메인을 가진 모든 쿠키를 검사할 필요(많은 파일을 읽는 것을 수반합니다)를 제거합니다. domain_return_ok()path_return_ok()에서 참을 반환하면 모든 작업이 return_ok()로 넘어갑니다.

쿠키 도메인에 대해 domain_return_ok()가 참을 반환하면, 쿠키 경로에 대해 path_return_ok()가 호출됩니다. 그렇지 않으면, 해당 쿠키 도메인에 대해 path_return_ok()return_ok()가 호출되지 않습니다. path_return_ok()가 참을 반환하면, return_ok()Cookie 객체 자체로 호출되어 전체 검사를 수행합니다. 그렇지 않으면, 해당 쿠키 경로에 대해 return_ok()가 호출되지 않습니다.

domain_return_ok()request 도메인뿐만 아니라 모든 cookie 도메인에 대해 호출됨에 유의하십시오. 예를 들어, 요청 도메인이 "www.example.com"이면 함수는 ".example.com""www.example.com" 모두에 대해 호출될 수 있습니다. path_return_ok()도 마찬가지입니다.

request 인자는 return_ok()에 대해 설명된 대로입니다.

CookiePolicy.path_return_ok(path, request)

주어진 쿠키 경로에 대해, 쿠키를 반환하지 않아야 하면 False를 반환합니다.

domain_return_ok() 설명서를 참조하십시오.

위의 메서드를 구현하는 것 외에도, CookiePolicy 인터페이스의 구현은 어떤 프로토콜을 어떻게 사용해야 하는지를 나타내는 다음 어트리뷰트도 제공해야 합니다. 이러한 모든 어트리뷰트는 대입할 수 있습니다.

CookiePolicy.netscape

Netscape 프로토콜을 구현합니다.

CookiePolicy.rfc2965

RFC 2965 프로토콜을 구현합니다.

CookiePolicy.hide_cookie2

요청에 Cookie2 헤더를 추가하지 않습니다 (이 헤더가 있으면 서버에게 우리가 RFC 2965 쿠키를 이해하고 있음을 알립니다).

CookiePolicy 클래스를 정의하는 가장 유용한 방법은 DefaultCookiePolicy 에서 서브 클래싱하고 위의 메서드 중 일부나 전부를 재정의하는 것입니다. CookiePolicy 자체는 모든 쿠키를 설정하고 수신하도록 허용하는 ‘널 정책’으로 사용될 수 있습니다 (이 정책이 그리 유용하지는 않을 것입니다).

DefaultCookiePolicy 객체

쿠키 수락과 반환에 대한 표준 규칙을 구현합니다.

RFC 2965와 Netscape 쿠키를 모두 다룹니다. RFC 2965 처리는 기본적으로 꺼져있습니다.

자체 정책을 제공하는 가장 쉬운 방법은 이 클래스를 재정의하고 자체 검사를 추가하기 전에 재정의된 구현에서 해당 메서드를 호출하는 것입니다:

import http.cookiejar
class MyCookiePolicy(http.cookiejar.DefaultCookiePolicy):
    def set_ok(self, cookie, request):
        if not http.cookiejar.DefaultCookiePolicy.set_ok(self, cookie, request):
            return False
        if i_dont_want_to_store_this_cookie(cookie):
            return False
        return True

CookiePolicy 인터페이스를 구현하는 데 필요한 기능 외에도, 이 클래스를 사용하면 도메인이 쿠키를 설정하고 수신하는 것을 차단하고 허락할 수 있도록 합니다. 또한 다소 느슨한 Netscape 프로토콜 규칙을 약간 강화할 수 있는 몇 가지 엄격성 스위치가 있습니다 (일부 양성 쿠키를 차단하는 대가를 치르면서).

도메인 차단 목록과 수락 목록이 제공됩니다(둘 다 기본적으로 꺼져 있습니다). 차단 목록에 없으며 수락 목록에 포함된 도메인(수락 목록이 활성화된 경우)만 쿠키 설정 및 반환에 참여합니다. blocked_domains 생성자 인자와 blocked_domains(), set_blocked_domains() 메서드(그리고 allowed_domains 를 위한 해당 인자와 메서드)를 사용하십시오. 수락 목록을 설정한 경우, 이를 None 으로 설정하여 다시 끌 수 있습니다.

점으로 시작하지 않는 차단 또는 수락 목록에 있는 도메인은 일치할 쿠키 도메인과 같아야 합니다. 예를 들어, "example.com"은 차단 목록 항목 "example.com"과 일치하지만, "www.example.com"은 일치하지 않습니다. 점으로 시작하는 도메인은 더 구체적인 도메인과도 일치합니다. 예를 들어, "www.example.com""www.coyote.example.com"은 모두 ".example.com"과 일치합니다 (하지만 "example.com" 자체는 일치하지 않습니다). IP 주소는 예외이며, 정확히 일치해야 합니다. 예를 들어, blocked_domains에 "192.168.1.2"".168.1.2"가 포함되어 있으면, 192.168.1.2는 차단되지만, 193.168.1.2는 차단되지 않습니다.

DefaultCookiePolicy는 다음과 같은 추가 메서드를 구현합니다:

DefaultCookiePolicy.blocked_domains()

차단된 도메인 시퀀스를 반환합니다 (튜플로).

DefaultCookiePolicy.set_blocked_domains(blocked_domains)

차단된 도메인 시퀀스를 설정합니다.

DefaultCookiePolicy.is_blocked(domain)

domain이 쿠키 설정이나 수신에 대한 차단 목록에 있으면 True를 반환합니다.

DefaultCookiePolicy.allowed_domains()

None 또는 허용된 도메인 시퀀스(튜플)를 반환합니다.

DefaultCookiePolicy.set_allowed_domains(allowed_domains)

허용된 도메인 시퀀스 또는 None 을 설정합니다.

DefaultCookiePolicy.is_not_allowed(domain)

domain이 쿠키 설정이나 수신에 대한 수락 목록에 있으면 True를 반환합니다.

DefaultCookiePolicy 인스턴스에는 다음과 같은 어트리뷰트가 있습니다. 이 어트리뷰트들은 모두 같은 이름의 생성자 인자로 초기화되며, 모두 대입할 수 있습니다.

DefaultCookiePolicy.rfc2109_as_netscape

If true, request that the CookieJar instance downgrade RFC 2109 cookies (that is, cookies received in a Set-Cookie header with a version cookie-attribute of 1) to Netscape cookies by setting the version attribute of the Cookie instance to 0. The default value is None, in which case RFC 2109 cookies are downgraded if and only if RFC 2965 handling is turned off. Therefore, RFC 2109 cookies are downgraded by default.

일반 엄격성 스위치:

DefaultCookiePolicy.strict_domain

사이트가 .co.uk, .gov.uk, .co.nz 등의 국가 코드 최상위 도메인으로 2개의 구성 요소 도메인을 설정하는 것을 수락하지 않습니다. 이것은 완벽하지는 않으며 작동하지 않을 수도 있습니다!

RFC 2965 프로토콜 엄격성 스위치:

DefaultCookiePolicy.strict_rfc2965_unverifiable

확인할 수 없는 트랜잭션(unverifiable transactions)에 대한 RFC 2965 규칙을 따릅니다 (일반적으로 확인할 수 없는 트랜잭션은 다른 사이트에서 호스팅 되는 이미지에 대한 리디렉션이나 요청으로 인한 결과입니다). 이것이 거짓이면, 확인 가능성에 기초하여 쿠키가 차단되지 않습니다.

넷스케이프 프로토콜 엄격성 스위치:

DefaultCookiePolicy.strict_ns_unverifiable

Netscape 쿠키에도 확인할 수 없는 트랜잭션에 대한 RFC 2965 규칙을 적용합니다.

DefaultCookiePolicy.strict_ns_domain

Netscape 쿠키에 대한 도메인 일치 규칙이 얼마나 엄격한지를 나타내는 플래그. 허용 가능한 값은 아래를 참조하십시오.

DefaultCookiePolicy.strict_ns_set_initial_dollar

이름이 '$'로 시작하는 Set-Cookie: 헤더의 쿠키를 무시합니다.

DefaultCookiePolicy.strict_ns_set_path

경로가 요청 URI와 경로 일치하지 않는 쿠키 설정을 수락하지 않습니다.

strict_ns_domain 은 플래그의 집합입니다. 이 값은 OR 연산을 통해 결합되어 구성됩니다(예를 들어, DomainStrictNoDots|DomainStrictNonDomain 은 두 플래그가 모두 설정되었음을 의미합니다).

DefaultCookiePolicy.DomainStrictNoDots

쿠키를 설정할 때 ‘호스트 접두사’에 점(.)이 포함되어서는 안 됩니다(예를 들어, www.foo 에 점이 포함되어 있으므로 www.foo.bar.com.bar.com 에 대한 쿠키를 설정할 수 없습니다).

DefaultCookiePolicy.DomainStrictNonDomain

domain 쿠키 어트리뷰트를 명시적으로 지정하지 않은 쿠키는 쿠키를 설정한 도메인과 동일한 도메인으로만 반환될 수 있습니다(예를 들어, spam.example.comdomain 쿠키 어트리뷰트가 없는 example.com 의 쿠키를 반환하지 않습니다).

DefaultCookiePolicy.DomainRFC2965Match

쿠키를 설정할 때, 전체 RFC 2965 도메인 일치가 필요합니다.

편의를 위해 다음 어트리뷰트가 제공되며, 위 플래그의 가장 유용한 조합입니다:

DefaultCookiePolicy.DomainLiberal

0과 동일합니다(즉, 위의 모든 Netscape 도메인 엄격성 플래그가 꺼진 상태입니다).

DefaultCookiePolicy.DomainStrict

DomainStrictNoDots|DomainStrictNonDomain 과 동등합니다.

첫 번째 예시는 http.cookiejar 의 가장 일반적인 사용법을 보여줍니다:

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

이 예는 Netscape, Mozilla 또는 Lynx 쿠키를 사용하여 URL을 여는 방법을 보여줍니다 (쿠키 파일의 위치에 대해서는 유닉스/Netscape 규칙을 가정합니다):

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("http://example.com/")

다음 예는 DefaultCookiePolicy 의 사용법을 보여줍니다. RFC 2965 쿠키를 켜고, Netscape 쿠키를 설정하고 반환할 때 도메인에 대해 더욱 엄격하며, 일부 도메인이 쿠키를 설정하거나 쿠키를 반환하지 못하도록 차단합니다:

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("http://example.com/")

분실물 보관소