【问题标题】:How do you set cookie policy in Python3?你如何在 Python3 中设置 cookie 策略?
【发布时间】:2020-05-07 13:39:42
【问题描述】:

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

    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 对象。这是一个RequestsCookieJar,我不知道如何设置 cookie 策略值。在 pycharm 调试器中,我可以看到 my_session.cookies 具有“受保护的属性”,其中之一是 _policy,它是 DefaultCookiePolicy 对象。我可以看到 hide_cookie2 是 False(默认值和我需要的),但 rfc2965 也是 False 并且需要设置为 True。

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

【问题讨论】:

    标签: python-3.x cookies python-requests zeep


    【解决方案1】:

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

    from http.cookiejar import DefaultCookiePolicy
    from requests import Session
    
    myCookiePolicy=DefaultCookiePolicy(rfc2965=True)
    
    my_session = Session()
    my_session.cookies.set_policy(policy=myCookiePolicy)
    

    希望这会有所帮助。

    【讨论】:

    • 您好,谢谢。它确实有帮助。然而,在周末,我了解到有两个问题:1)Zeep 没有将会话cookie 传递到requestspost 方法中;并且,2) requests 有一个长期存在的已知问题,因为它实际上并没有为出站请求复制 cookie policies -- 显然这是一件复杂的事情。
    • 欢迎。为了能够帮助他人,请接受此答案,因为它解决了相关问题。希望没事。
    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多