Web lists-archives.com

Re: KIO and cookies




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