Web lists-archives.com

Re: KIO and cookies




On lunedì 30 ottobre 2017 21:23:04 CET Albert Astals Cid wrote:
> El diumenge, 29 d’octubre de 2017, a les 9:47:24 CET, Stefano Crocco va
> 
> escriure:
> > Hello to everyone,
> > I'm working on making QWebEngine work correctly in Konqueror when
> > downloading files (although I didn't have much time to spend on this in
> > the
> > last months).
> > 
> > The problem is that instead of downloading the correct files, in some
> > cases
> > Konqueror download html files. This only happens from sites requiring
> > authentication (I first noticed when trying to download a file from my
> > bank's web page); besides, it only happens if I try to use KIO for the
> > download, for example calling KIO::copy from a slot connected with
> > QWebEngineProfile::downloadRequested. The file downloads correctly if
> > Konqueror downloads it using the mechanism provided by QWebEngine, that is
> > calling QWebEngineDownloaditem::accept.
> > 
> > I believe that the issue is caused by cookies, and in particular by the
> > fact that QWebEngine doesn't share its cookies with KIO so that, when KIO
> > attempts to download the file, it doesn't have the cookie(s) associated
> > with the session opened in the browser and the web page refuses to let it
> > download the file (indeed, one of the sites where this happens returned a
> > login page instead of the PDF I wanted to download).
> > 
> > Looking at the documentation both for QWebEngine and for KIO
> > regarding cookies. I found out two classes:
> > * on QWebEngine's side, there's QWebEngineCookieStore, which provides
> > signals emitted whenever a cookie is added or removed and which, according
> > to documentation [1], "can be used to synchronize cookies of Chromium and
> > the QNetworkAccessManager"
> > * on KIO's side, there's KIO::Integration::AccessManager, which derives
> > from QNetworkAccessManager and which should work along
> > QWebEngineCookieStore.
> > 
> > The example in the documentation for KIO::Integration::AccessManager
> > refers
> > to QWebView and says to call QWebPage::setNetworkAccessManager to have the
> > QWebView and KIO to use the same access manager. Unfortunately, QWebEngine
> > can't be integrated with a QNetworkAccessManager: not only QWebEnginePage
> > doesn't have a setNetworkAccessManager method, but the documentation for
> > QWebEngine explicitly says that it doesn't use QNetworkAccess. Because of
> > this, I thought to do things the other way round: I created a
> > KIO::Integration::AccessManager and, used slots connected with
> > QWebEngineCookieStore signals, to add cookies to it.
> > 
> > Unfortunately, this doesn't fix the issue. I believe this is because I
> > haven't told KIO to use the new access manager. The problem is that I can
> > see any way to do it. Does anyone have suggestions on how to do this?
> 
> Since your question is related to KIO you may want to ask in
> kde-frameworks-devel@xxxxxxx if noone answers here.
> 
> Cheers,
>   Albert
> 
> > Thanks
> > 
> > Stefano
> > 
> > [1] http://doc.qt.io/qt-5/qwebenginecookiestore.html#details

Thanks for the advice. I'll wait a couple more days and if I'll receive no 
answers here I'll try there.

Stefano