Qt中的HTTP协议

HTTP和HTTPS有哪些区别

1.HTTP是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS则解决HTTP不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输

2.HTTP连接建立相对简单,TCP三次握手之后便可以进行HTTP的报文传输。而HTTPS在TCP三次握手之后,还需进行SSL/TLS的握手过程,才可进行加密报文传输。

3.两者的默认端口不一样,HTTP默认端口是80,HTTPS的默认端口是443

4.HTTPS协议需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的

HTTP 常见的状态码有哪些

2××成功,报文已经收到并被正确处理(200,204,206)
3××重定向,资源位置发生变动,需要客户端重新发送请求(301,302,304)
4××客户端错误,请求报文有误,服务器无法处理(400,403,404)
5××服务器错误,服务器在处理请求时内部发生了错误(500,501,502,503)

Qt中HTTP的接口类

  • 实现高层网络操作的类

        --QNetworkRequest类

        通过一个URL地址发起网络协议请求,也保存网络请求的信息,目前支持HTTP、FTP和局部文件URLs的下载或上传

(PS:Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator,统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。)

        --QNetworkAccessManager类

        用于协调网络操作。在QNetworkResquest发起一个网络请求后,QNetworkAccessManager类负责发送网络请求,创建网络响应。

        --QNetworkReply类

        表示网络请求的响应。由QNetworkAccessManager在发送一个网络请求后创建一个网络响应。QNetworkReply提供的信号finished()、readyRead()和downloadProgress()可以监测网络响应的执行情况,执行相应操作。

案例:基于HTTP协议的网络文件下载

导入头文件

#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkAccessManager>

下载代码

// "下载"
void Widget::on_btnDownload_clicked()
{
    QString urlSpec = ui->editUrl->text().trimmed(); // 获取用户输入的要下载文件的url
    if(urlSpec.isEmpty()){
        QMessageBox::information(this,"下载","请输入需要下载的URL");
        return;
    }
    QUrl newUrl = QUrl::fromUserInput(urlSpec);
    if(!(newUrl.isValid())){
        QMessageBox::information(this,"下载",
                         QString("无效的URL:%1\n 错误信息:%2").arg(urlSpec,newUrl.errorString()));
        return;
    }
    QString tempDir = ui->editPath->text().trimmed(); // 获取保存下载文件的路径
    if(tempDir.isEmpty()){
        QMessageBox::information(this,"下载","请指定保存下载文件的路径");
        return;
    }
    QString fullFileName = tempDir + newUrl.fileName();
    if(QFile::exists(fullFileName))
        QFile::remove(fullFileName);    // 如果文件已存在,则删除

    downloadedFile = new QFile(fullFileName);
    if(!downloadedFile->open(QIODevice::WriteOnly)){
        QMessageBox::information(this,"下载","临时文件打开失败");
        return;
    }
    ui->btnDownload->setEnabled(false);
    reply = networkAccessManager.get(QNetworkRequest(newUrl)); // 发动网络请求,获取网络响应对象
    // 信号和槽函数的连接
    connect(reply, SIGNAL(readyRead()),this, SLOT(onReadyRead()));
    connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(onDownloadProgress(qint64,qint64)));
    connect(reply, SIGNAL(finished()), this, SLOT(onFinished()));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值