HTTP通信

通过网络访问接口实现HTTP通信

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QUrl>
#include <QFile>
#include <QDebug>

class QNetworkReply;
class QNetworkAccessManager;


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void startRequest(QUrl url);
public slots:
    void pushButtonClicked();

private:
    Ui::MainWindow *ui;
    QNetworkAccessManager *manager;

    QNetworkReply *reply;
    QUrl url;
    QFile *file;

private slots:
    //void replyFinished(QNetworkReply*);
    void httpFinished();
    void httpReadyRead();
    void updateDataReadProgress(qint64, qint64);

};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtNetwork>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    manager = new QNetworkAccessManager(this);
    ui->progressBar->hide();
//    connect(manager, &QNetworkAccessManager::finished,
//            this, &MainWindow::replyFinished);
//    manager->get(QNetworkRequest(QUrl("https://tieba.baidu.com/index.html")));
    connect(ui->pushButton, &QPushButton::clicked,
            this, &MainWindow::pushButtonClicked);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::startRequest(QUrl url)
{
    reply = manager->get(QNetworkRequest(url));

    connect(reply, &QNetworkReply::readyRead,
            this, &MainWindow::httpReadyRead);
    connect(reply, &QNetworkReply::downloadProgress,
            this, &MainWindow::updateDataReadProgress);
    connect(reply, &QNetworkReply::finished,
            this, &MainWindow::httpFinished);

}

void MainWindow::pushButtonClicked()
{
    qDebug() << "pushButtonClicked";
    url = ui->lineEdit->text().trimmed();
    QFileInfo info(url.path());
    QString filename = info.fileName();
    if(filename.isEmpty()){
        filename = "index.html";
    }
    file = new QFile(filename);
    if(!file->open(QIODevice::WriteOnly)){
        delete file;
        file = 0;
        return;
    }
    qDebug() << url;
    startRequest(url);
    ui->progressBar->setValue(0);
    ui->progressBar->show();
}

void MainWindow::httpFinished()
{
    ui->progressBar->hide();
    if(file){
        file->close();
        delete file;
        file = 0;

    }
    reply->deleteLater();
    reply = 0;


}

void MainWindow::httpReadyRead()
{
    if(file){
        file->write(reply->readAll());
    }

}

void MainWindow::updateDataReadProgress(qint64 bytesReceived, qint64 bytesTotal)
{
    ui->progressBar->setMaximum(bytesTotal);
    ui->progressBar->setMinimum(bytesReceived);
}

//void MainWindow::replyFinished(QNetworkReply *reply)
//{
//    QString all = reply->readAll();

//    ui->textBrowser->setText(all);
//    reply->deleteLater();
//}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极地星光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值