QT-http通信

QT-http通信

  • 前言
  • 一、QT HTTP模块
  • 二、使用步骤
    • 1.引入库
    • 2.建立http通信
  • 总结

前言

HTTP是Interent上使用最多的通信协议之一。
QT也提供了相应的模块来实现HTTP通信。

一、QT HTTP模块

QT的http通信类属于QT的network模块里。
主要通过该模块的三个类QNetworkRequest、QNetworkReply、QNetworkAccessManager建立http通信。

QNetworkRequest用于请求的主体及配置,比如地址,标头及消息等,它包含一个 URL 和一些可用于修改请求的辅助信息。

QNetworkAccessManager用于发送请求,该对象保存它发送的请求的通用配置和设置。它包含代理和缓存配置,以及与此类问题相关的信号,以及可用于监控网络操作进度的回复信号。应用程序可以使用它通过网络发送请求。提供了一组接受请求和可选数据的标准函数,每个函数都返回一个QNetworkReply对象。返回的对象用于获取响应相应请求而返回的任何数据。

QNetworkReply用于接收到的数据主体,它包含一个 URL 和标头(以解析形式和原始形式)、一些关于回复状态的信息和回复本身的内容。

这些类的详细信息见官网https://doc.qt.io/qt-5/qnetworkaccessmanager.html

二、使用步骤

1.引入库

在QT项目文件pro中添加

QT += network

然后在头文件中添加

#include 
#include 
#include 

2.建立http通信

#include 
#include 
#include 
#include 
#include 
private slots:
    void do_Error(QNetworkReply::NetworkError);
    void do_requestFinished();

private:
    Ui::MainWindow *ui;
    QNetworkAccessManager *myManager;
    QNetworkRequest *myRequest;
    QNetworkReply *myReply;
void MainWindow::initHttp() //http通信
{
    myManager = new QNetworkAccessManager();
    myRequest = new QNetworkRequest();
    myRequest->setUrl(QUrl("file:///D:/ceshi/ceshi.html"));
    myRequest->setRawHeader("User-Agent",
                            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36");

    myReply = myManager->get(*myRequest);
    connect(myReply,&QNetworkReply::finished,this,&MainWindow::do_requestFinished); //请求完成信号
//    connect(myReply, &QNetworkReply::errorOccurred,this, &MainWindow::do_Error);//&QNetworkReply::errorOccurred在5.15引入
    connect(myReply, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error),this, &MainWindow::do_Error);

}
void MainWindow::do_Error(QNetworkReply::NetworkError error)
{
   QString errorstring = myReply->errorString();
   ui->textEdit->clear();
   ui->textEdit->append(errorstring);
}
void MainWindow::do_requestFinished()
{
    QByteArray myData = myReply->readAll();
    QString myDatastr = QString::fromUtf8(myData);
    qDebug()<< myDatastr;
    ui->textEdit->clear();
    ui->textEdit->append(myDatastr);
}

总结

上面是简单的http通信示例,想要使用https请求,需要openssl环境。
可以下载libeay32.dll和ssleay32.dll文件至exe同级运行目录。
仅凭上面的示例是无法真正的获取网站的数据,大部分网站都有反爬技术。可以访问自己写的html文件,做测试。
如有错误希望请大家指导,谢谢点赞!
希望和大家一起学习,交流!

你可能感兴趣的:(QT,HTTP,qt,网络,http)