Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Скачивание файла с https



  • Всем привет. Очень сильно прошу помощи в подробной инструкции, как сделать поддержку https для моего приложения.
    Мне просто по ссылке нужно скачать файлик и всё. Так как поддержки нету, то программа качает тот же файл, но внутри обычный html код.

    Вот код приложения:

    .pro

        QT       += core gui network
         
        greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
         
        TARGET = DownloadEQFirmware
        TEMPLATE = app
         
        DEFINES += QT_DEPRECATED_WARNINGS
         
        SOURCES += \
                main.cpp \
                mainwindow.cpp
         
        HEADERS += \
                mainwindow.h
         
        FORMS += \
                mainwindow.ui
    

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include <QMainWindow>
    #include <QUrl>
    #include <QNetworkAccessManager>
    #include <QNetworkRequest>
    #include <QNetworkReply>
    #include <QFile>
     
    namespace Ui {
    class MainWindow;
    }
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
     
    private:
        Ui::MainWindow *ui;
     
        QUrl urlStandard3N;
        QNetworkAccessManager *firmwareManager;
     
    public slots:
        void downloadFirmware();
        void downloadFirmwareFile(QNetworkReply *reply);
    };
     
    #endif // MAINWINDOW_H
    

    mainwindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
     
        firmwareManager = new QNetworkAccessManager();
     
        connect(ui->btn_download, &QPushButton::clicked, this, &MainWindow::downloadFirmware);
        connect(firmwareManager, &QNetworkAccessManager::finished, this, &MainWindow::downloadFirmwareFile);
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
     
    void MainWindow::downloadFirmware()
    {
        urlStandard3N = "http://www.eqdrive.com.ua/files/Updates/Standard3N/EQD4.6.0.1397.eqh";
     
        QNetworkRequest requestToUpdateStandard3N;          // Отправляемый запрос
        requestToUpdateStandard3N.setUrl(urlStandard3N);    // Устанавлвиваем URL в запрос
        firmwareManager->get(requestToUpdateStandard3N);    // Выполняем запрос
    }
     
    void MainWindow::downloadFirmwareFile(QNetworkReply *reply)
    {
        if(reply->error()) {
            qDebug() << "reply error: " << reply->errorString();
        } else {
            QFile file("EQD4.6.0.1397.eqh");
            if(file.open(QFile::WriteOnly)) {
                file.write(reply->readAll());
                file.close();
            }
        }
    }
    

    Никак не могу разобраться и прошу вашей помощи



  • @razorqhex said in Скачивание файла с https:

    http://www.eqdrive.com.ua/files/Updates/Standard3N/EQD4.6.0.1397.eqh

    Этот урл возвращает редирект 301, в QNetworkAccessManager редиректы по-умолчанию не обрабатываются, включается через QNetworkAccessManager::setRedirectPolicy() либо для каждого отдельного реквеста атрибутом. Или можно вручную обрабатывать, до Qt 5.6 встроенных редиректов вообще не было.


Log in to reply