qt 網絡庫使用介紹


qt 網絡庫使用介紹

在.pro文件中,要手動添加network模塊:QT += network

有三個核心類,

  • QNetworkAccessManager: 發送get或者post請求。

    用get方法或者post方法發送get/post請求

    參數是QNetworkRequest,返回值是QNetworkReply

  • QNetworkRequest:包裝請求信息

    用setHeader方法設置請求的header

    用setUrl方法設置服務器的IP和端口

  • QNetworkReply:包裝接服務器返回的信息。

    注意,用rep->readAll();得到返回的數據;用rep->readAll(key);得到返回的header信息

一個小例子,給百度發一個get請求。

注意事項:

1,設置http請求頭UserAgent,目的是偽裝成瀏覽器的發送的http請求。

2,調用get方法后,在等待服務器的返回的過程中,get方法或者post方法是不阻塞的,調用后立即返回。

3,因為get/post方法不阻塞,那怎么才能知道服務器什么時候處理完,返回給客戶端呢,監聽QNetworkReply里的&QNetworkReply::readyRead信號。

4,qDebug() << 2222;會先於qDebug() << data;被打印出來。原因是get方法不阻塞。

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

    QNetworkAccessManager* mgr = new QNetworkAccessManager(this);

    QString agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36";
    QNetworkRequest res;
    //設置http請求頭UserAgent,目的是偽裝成瀏覽器的發送的http請求
    res.setHeader(QNetworkRequest::UserAgentHeader, agent);
    //設置URL
    //res.setUrl(QUrl("http://www.baidu.com:80"));
    res.setUrl(QUrl("http://10.210.65.129:80"));

    //發送http請求,返回的結果放到rep里。
    //QNetworkReply* rep = mgr->post(res, "");
    QNetworkReply* rep = mgr->get(res);

    //讀服務器返回的數據
    connect(rep, &QNetworkReply::readyRead, this, [=](){

        //取得服務器回發的header數據
        QVariant url =  rep->header(QNetworkRequest::LocationHeader);
        //服務器回發的數據,但不包括頭,頭的信息在header里。
        QByteArray data = rep->readAll();
        qDebug() << data;
        qDebug() << url.toString();
    });

    qDebug() << 2222;
}

c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM