как сохранить/загрузить куки в/из QNetworkAccessManager

Я использовал QNetworkAccessManager для загрузки страниц и входа на некоторые сайты. Я хочу сохранить файлы cookie и загрузить их в следующий раз с помощью этой программы.

Я пишу этот код для сохранения файлов cookie:

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 не работает и возникает эта ошибка:

суперкласс init() типа QNetworkCookieJar никогда не вызывался

Что я могу сделать, чтобы сделать это?


person Saj Haz    schedule 23.01.2016    source источник


Ответы (2)


Это сообщение об ошибке обычно означает, что вы создали подкласс 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')
person The Compiler    schedule 24.01.2016

Я думаю, вам нужно использовать cookiejar из QNetWork,

import shelve
self.netManager=QNetworkAccessManager()
#... Load Pages and Login ....
with shelve.open('LoginDb','c') as db:
    db['cooki']= QtNetwork.QNetworkCookieJar(parent=self)
person Achayan    schedule 24.01.2016