首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt5:如何在QNetworkCookie中设置SameSite/安全报头

PyQt5:如何在QNetworkCookie中设置SameSite/安全报头
EN

Stack Overflow用户
提问于 2022-05-13 01:28:35
回答 1查看 112关注 0票数 1

我有一些Python代码,它设置了如下所示的cookie:

代码语言:javascript
复制
loader = QtWebEngineWidgets.QWebEngineView()
profile = QtWebEngineWidgets.QWebEngineProfile("storage", loader)
cookie_store = profile.cookieStore()

with open('cookie.txt', 'rb') as f:
    contents = f.read()

cookie_store.setCookie(QNetworkCookie(contents))
webpage = QtWebEngineWidgets.QWebEnginePage(profile, loader)

但是,当我运行上面的代码时,我会得到以下错误:

代码语言:javascript
复制
A cookie associated with a resource at was set with `SameSite=None` but without `Secure`

如何使用PyQT5解决这个问题?如何使用SameSite=NoneSecure设置PyQt5?

EN

回答 1

Stack Overflow用户

发布于 2022-05-13 20:42:59

Qt6有一个用于处理SameSite的专用API,但是在Qt5中没有类似的东西。因此,由于QWebEngineCookieStore只接受QNetworkCookie对象,因此有必要从原始cookie数据构造它们。这可以很容易地使用Python的http.cookie模块 (这将确保所有内容都被正确编码):

代码语言:javascript
复制
from http.cookies import SimpleCookie

cookie = SimpleCookie()
cookie['name'] = 'value'
cookie['name']['samesite'] = None
cookie['name']['secure'] = True
contents = cookie.output().encode('ascii')

for qt_cookie in QtNetwork.QNetworkCookie.parseCookies(contents):
    print(qt_cookie.toRawForm())
    cookie_store.setCookie(qt_cookie)

输出:

代码语言:javascript
复制
b'Set-Cookie: name=value; secure; SameSite=None'

有关可与MDN: SameSite cookie一起使用的各种值的说明,请参见SameSite。显然,明确设置SameSite=Lax可能是一个更好的默认设置:

代码语言:javascript
复制
cookie = SimpleCookie()
cookie['name'] = 'value'
cookie['name']['samesite'] = 'Lax'
contents = cookie.output().encode('ascii')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72223575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档