如何 save/load cookies to/from QNetworkAccessManager
how to save/load cookies to/from QNetworkAccessManager
我使用 QNetworkAccessManager 加载页面并登录到某些站点。我想使用这个程序保存 cookie 并将它们加载到下一个。
我写这段代码来保存 cookies:
import shelve
self.netManager=QNetworkAccessManager()
#... Load Pages and Login ....
with shelve.open('LoginDb','c') as db:
db['cooki']=netManager.CookieJar()
和此加载 cookie 的代码:
with shelve.open('LoginDb','c') as db:
self.netManager.setCookieJar(db['cooki'])
但 setCookieJar 不起作用并出现此错误:
super-class init() of type QNetworkCookieJar was never called
我该怎么做才能做到这一点?
我认为你需要使用 QNetWork 的 cookiejar,
import shelve
self.netManager=QNetworkAccessManager()
#... Load Pages and Login ....
with shelve.open('LoginDb','c') as db:
db['cooki']= QtNetwork.QNetworkCookieJar(parent=self)
该错误消息通常表示您继承了 QNetworkCookieJar
并忘记调用超类 __init__
。你应该这样做(假设 Python 3):
class CookieJar(QNetworkCookieJar):
def __init__(self, parent):
super().__init__(parent) # You probably don't do this
# Do custom stuff here
我也建议不要使用 shelve
。它脆弱、缓慢,而且在某些情况下
场景存在安全风险。我个人只是将它们存储在一个明文文件中
我的项目 - 是这样的:
class CookieJar(QNetworkCookieJar):
# [...]
def parse_cookies(self):
cookies = []
with open('cookies', 'r') as f:
for line in f:
cookies += QNetworkCookie.parseCookies(line)
self.setAllCookies(cookies)
def save(self):
with open('cookies', 'w') as f:
for cookie in self.allCookies():
if not cookie.isSessionCookie():
f.write(cookie.toRawForm() + '\n')
我使用 QNetworkAccessManager 加载页面并登录到某些站点。我想使用这个程序保存 cookie 并将它们加载到下一个。
我写这段代码来保存 cookies:
import shelve
self.netManager=QNetworkAccessManager()
#... Load Pages and Login ....
with shelve.open('LoginDb','c') as db:
db['cooki']=netManager.CookieJar()
和此加载 cookie 的代码:
with shelve.open('LoginDb','c') as db:
self.netManager.setCookieJar(db['cooki'])
但 setCookieJar 不起作用并出现此错误:
super-class init() of type QNetworkCookieJar was never called
我该怎么做才能做到这一点?
我认为你需要使用 QNetWork 的 cookiejar,
import shelve
self.netManager=QNetworkAccessManager()
#... Load Pages and Login ....
with shelve.open('LoginDb','c') as db:
db['cooki']= QtNetwork.QNetworkCookieJar(parent=self)
该错误消息通常表示您继承了 QNetworkCookieJar
并忘记调用超类 __init__
。你应该这样做(假设 Python 3):
class CookieJar(QNetworkCookieJar):
def __init__(self, parent):
super().__init__(parent) # You probably don't do this
# Do custom stuff here
我也建议不要使用 shelve
。它脆弱、缓慢,而且在某些情况下
场景存在安全风险。我个人只是将它们存储在一个明文文件中
我的项目 - 是这样的:
class CookieJar(QNetworkCookieJar):
# [...]
def parse_cookies(self):
cookies = []
with open('cookies', 'r') as f:
for line in f:
cookies += QNetworkCookie.parseCookies(line)
self.setAllCookies(cookies)
def save(self):
with open('cookies', 'w') as f:
for cookie in self.allCookies():
if not cookie.isSessionCookie():
f.write(cookie.toRawForm() + '\n')