您如何在 Python3 中设置 cookie 政策?

How do you set cookie policy in Python3?

我正在使用 python 3.8。我正在尝试使用 Zeep 库来使用公司的 SOAP 资源。 SOAP 服务很旧,不会很快更新。其中一个问题是服务在响应 cookie 中设置了 "session ID"。它设置了现在已过时的 set-cookie2 header.

    from requests import Session
    from zeep import Client, Settings
    from zeep.cache import SqliteCache
    from zeep.transports import Transport

    my_session = Session()
    my_settings = Settings(strict=False)
    my_cache = SqliteCache()
    my_url = 'https://lists.mycompany.com/lists/wsdl'

    client = Client(
        my_url,
        transport=Transport(
            session=my_session,
            cache=my_cache
        ),
        settings=my_settings
    )
    ...

我可以在 my_session 中看到 cookie object。这是一个 RequestsCookieJar,我不知道如何设置 cookie 策略值。在 pycharm 调试器中,我可以看到 my_session.cookies 有 "Protected Attributes",其中之一是 _policy,它是 DefaultCookiePolicy object。我可以看到 hide_cookie2 是 False(默认值和我需要的)但是 rfc2965 也是 False 并且需要设置为 True。

RequestsCookieJar class 中,我看到了 get_policy() 方法,但没有设置策略。我在某处缺少链接。如何为整个应用程序或每个请求设置 cookie 策略?

嗯, 您可以像这样覆盖 DefaultCookiePolicy 属性:

from http.cookiejar import DefaultCookiePolicy
from requests import Session

myCookiePolicy=DefaultCookiePolicy(rfc2965=True)

my_session = Session()
my_session.cookies.set_policy(policy=myCookiePolicy)

希望这对您有所帮助。