QT---使用http协议进行重定向通信测试(入门级)

1:问题说明

当我们在网址输入栏输入http://www.baidu.com/ 能够进入百度首页,但是当我们跳转到百度首页的时候,会发现网址输入栏已然变成了https://www.baidu.com/。这是因为在这个过程中其实百度给我们做了重定向的操作,由于http协议在传输过程中可能会被第三方获取信息,部署HTTPS加密是防止流量劫持基本、重要的安全措施!在这里插入图片描述在这里插入图片描述

补充:

  • HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。

2:用QT实现重定向整个过程

2.1:需要用到的头文件

#include<QNetworkAccessManager>  //它用来发送网络请求和接收应答。
#include<QNetworkReply>  //包含了发送给QNetworkAccessManager请求的所有应答数据且一个顺序访问的QIODevice
#include<QNetworkRequest>  //包含着在网络上发送请求的必要信息

2.2:演示过程

首先,我们先建一个QT程序,窗口使用mainwindow即可,然后我们再mainwindow.cpp中去写我们的代码。

利用QT程序去模拟用户访问http://www.baidu.com:80这个过程,看看百度那边给我们重定向传来的数据是什么。 所有注释和代码如下:
在这里插入图片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QNetworkAccessManager>
#include<QNetworkReply>
#include<QNetworkRequest>

#include<QDebug>  //用于测试打印

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    
    
    ui->setupUi(this);

    //需要一个manager对象,用于发送get、post请求
    QNetworkAccessManager* manager = new QNetworkAccessManager(this);  //this的好处是当前窗口被释放,manager也会被释放
    //准备工作---初始化一个QNetworkRequest,因为post函数会用到这个参数
    QNetworkRequest res;
    //设置请求头---浏览器  第二个参数可以去浏览器的开发工具上看
    res.setHeader(QNetworkRequest::UserAgentHeader,
                  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38");
    res.setUrl(QUrl("http://www.baidu.com:80"));

    //发送请求
    QNetworkReply* reply = manager->get(res);  //get(res)   post(res,"")

    //读服务器回写的数据
    connect(reply,&QNetworkReply::readyRead,this,[=](){
    
    
        //读数据
        QVariant str = reply->header(QNetworkRequest::LocationHeader);  //如果浏览器做了重定向操作,那么服务器回写的数据会返回给请求头,reply->header的返回值是万能类型
        QByteArray data = reply->readAll();
        qDebug()<<data;
        qDebug()<<str.toString();
    });
}

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

当我们使用get请求时,服务器回写的数据如下图所示:在这里插入图片描述
当我们使用post请求时,服务器回写的数据如下图所示:在这里插入图片描述


最后,觉得本文内容对你有所帮助的话,希望能点赞收藏,你的鼓励是对我最大的支持!

猜你喜欢

转载自blog.csdn.net/qq_40077565/article/details/121440417