Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. WebKit (or WebEngine ?) and secured web site download
Forum Updated to NodeBB v4.3 + New Features

WebKit (or WebEngine ?) and secured web site download

Scheduled Pinned Locked Moved General and Desktop
3 Posts 1 Posters 971 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    sev75
    wrote on last edited by sev75
    #1

    Hi,
    I open a pictures catalog web site secured by login in a QWebView. When I clic on the web site link to download a picture, nothing happen.
    Before opening the web site in the QWebView, I make this connexion :
    connect(ui->webView->page()->networkAccessManager(),SIGNAL(finished(QNetworkReply *)),this,SLOT(onFinished(QNetworkReply *)));

    In "onFinished", I take a look at QNetworkReply but it's empty. The web site use a php script to do the download.
    After many tests, it seems I receive the "finished" signal before the end of the download. I tried with a delay but I got nothing more.

    In many forums (and in the documentation), I found methods that work with urls containing the filename to download. In my case, this is the php script which ask server for the file.

    Do you have an idea for me ? Thanks

    1 Reply Last reply
    0
    • S Offline
      S Offline
      sev75
      wrote on last edited by
      #2

      Hi,
      Still stuck !
      I succeed to obtain "reply->rawHeaderList" :
      "Date" "Server" "Content-Disposition" "Vary" "Content-Encoding" "Keep-Alive" "Connection" "Transfer-Encoding" "Content-Type"
      but I tried to save in a file "reply->readall" and the file was empty.
      I tried the "browser" example (which is working since Qt5.5) but download doesn't work in my case.

      1 Reply Last reply
      0
      • S Offline
        S Offline
        sev75
        wrote on last edited by
        #3

        Hi I'm desperate... Does anyone can help me ?
        Here is my test code :

        #include "mainwindow.h"
        #include "ui_mainwindow.h"
        #include <QBuffer>
        #include <QFile>
        #include <QStandardPaths>
        
        MainWindow::MainWindow(QWidget *parent) :
            QMainWindow(parent),
            ui(new Ui::MainWindow)
        {
            ui->setupUi(this);
        
            nam=new QNetworkAccessManager();
            ui->webView->page()->setNetworkAccessManager(nam);
            cookies=new MyCookieJar();
            nam->setCookieJar(cookies);
            diskCache = new QNetworkDiskCache(this);
            QString location = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
            diskCache->setCacheDirectory(location);
            nam->setCache(diskCache);
            connect(ui->webView->page()->networkAccessManager(),SIGNAL(finished(QNetworkReply*)),this,SLOT(onFinished(QNetworkReply*)));
            connect(ui->webView->page(), SIGNAL(unsupportedContent(QNetworkReply*)),this, SLOT(onUnsupported(QNetworkReply*)));
            connect(ui->webView->page(),SIGNAL(statusBarMessage(QString)),ui->statusBar,SLOT(showMessage(QString)));
        
            request.setUrl(QUrl("http://www.xxxxxxxxx.xxx/photo/download.php"));
            reponse=ui->webView->page()->networkAccessManager()->get(request);
            connect(reponse,SIGNAL(readyRead()),this,SLOT(readytoread()));
            ui->webView->load(request);
        
            m_pBuffer=new QByteArray();
        }
        
        MainWindow::~MainWindow()
        {
            delete m_pBuffer;
            delete nam;
            delete ui;
        }
        
        void MainWindow::readytoread()
        {
            QNetworkReply *reply=qobject_cast<QNetworkReply*>(sender());
            qDebug()<<"Ready to read:"<<reply->bytesAvailable();
        }
        
        void MainWindow::onFinished(QNetworkReply *reply)
        {
            if (reply->error() != QNetworkReply::NoError) {
                qDebug()<<"Finished!!"<<reply->errorString();
                if(reply->open(QIODevice::ReadOnly)) {
                    m_pBuffer->clear();
                }
                connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(DL_Progress(qint64,qint64)));
        
                QList<QByteArray> listHeader=reply->rawHeaderList();
                for(int i=0;i<listHeader.size();++i) qDebug()<<listHeader[i]<<"->"<<reply->rawHeader(listHeader[i]);
                QString txtTemp=reply->rawHeader("Content-Disposition");
                if(txtTemp.contains("filename")){
                    qDebug()<<"filename: "<<txtTemp.section('\"',1,1);
                    qDebug()<<"file size="<<reply->readBufferSize();
                }
                qDebug()<<cookies->getAllCookies ();
            }
            reply->deleteLater();
        }
        
        void MainWindow::onUnsupported(QNetworkReply *reply)
        {
            qDebug()<<"unsupported! datas size:"<<reply->bytesAvailable();
            *m_pBuffer = reply->readAll();
            QFile file("test.png");
            file.open (QIODevice::WriteOnly);
            file.write (*m_pBuffer);
            file.close ();
            reply->deleteLater();
        }
        
        void MainWindow::DL_Progress(qint64 recieved, qint64 total)
        {
            qDebug()<<"Progress: "<<recieved<<"/"<<total;
        }
        

        I change the url in the code but you can try with a photo web site with login : this is my problem.
        I don't know why but I never succeed to download the complete file: the web page download successfully then I click "Download" link and code produce "onFinished" with "operation canceled" error; download of the file begin because the headers tell it but file is never complete. The best I got is the end of the file.
        I hope you can help.
        Thanks

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved