中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt怎么實現HTTP的Get/Post請求

發布時間:2022-05-13 09:13:50 來源:億速云 閱讀:1725 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Qt怎么實現HTTP的Get/Post請求”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Qt怎么實現HTTP的Get/Post請求”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

借助Qt的NetWork模塊,可以輕松的實現HTTP的Get/Post請求,而不需要再次引用像libcurl這樣的第三方庫。
當然,Qt的NetWork模塊提供的功能遠遠不只是HTTP方面的。

頭文件

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

另外,使用Qt網絡模塊還需要引用Qt5Network.lib庫。

Get

先構造一個QNetworkAccessManager對象,QNetworkAccessManager對象提供了發送QNetworkRequest網絡請求和接收QNetworkReply網絡回復的功能。

QNetworkAccessManager還提供了緩存和Cookie管理、代理設置等功能。

QNetworkRequest提供了對本次網絡請求的封裝,在本示例中只是構造了一個最簡單的requset,沒有進行任何參數設置。QNetworkRequest提供了很多方法來對請求進行配置,比如我們可以使用QNetworkRequest::setHeader設置請求頭等。

void QtGuiApplication::onBtnGetClicked() {
    QNetworkRequest request;
    QNetworkAccessManager* naManager = new QNetworkAccessManager(this);
    QMetaObject::Connection connRet = QObject::connect(naManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
    Q_ASSERT(connRet);

    request.setUrl(QUrl("https://www.baidu.com"));
    QNetworkReply* reply = naManager->get(request);
}

請求是異步的,當請求完成之后,會調用void requestFinished(QNetworkReply* reply);槽函數:

void QtGuiApplication::requestFinished(QNetworkReply* reply) {
    // 獲取http狀態碼
    QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    if(statusCode.isValid())
        qDebug() << "status code=" << statusCode.toInt();

    QVariant reason = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
    if(reason.isValid())
        qDebug() << "reason=" << reason.toString();

    QNetworkReply::NetworkError err = reply->error();
    if(err != QNetworkReply::NoError) {
        qDebug() << "Failed: " << reply->errorString();
    }
    else {
        // 獲取返回內容
        qDebug() << reply->readAll();
    }
}

Post

void QtGuiApplication::onBtnPushClicked() {
    QNetworkRequest request;
    QNetworkAccessManager* naManager = new QNetworkAccessManager(this);
    QMetaObject::Connection connRet = QObject::connect(naManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
    Q_ASSERT(connRet);

    request.setUrl(QUrl("https://www.baidu.com"));
    
    QString testData = "test";
    QNetworkReply* reply = naManager->post(request, testData.toUtf8());
}

同樣,請求也是異步的,當請求完成之后,會調用void requestFinished(QNetworkReply* reply);槽函數(和Get一樣):

void QtGuiApplication::requestFinished(QNetworkReply* reply) {
    // 獲取http狀態碼
    QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    if(statusCode.isValid())
        qDebug() << "status code=" << statusCode.toInt();

    QVariant reason = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
    if(reason.isValid())
        qDebug() << "reason=" << reason.toString();

    QNetworkReply::NetworkError err = reply->error();
    if(err != QNetworkReply::NoError) {
        qDebug() << "Failed: " << reply->errorString();
    }
    else {
        // 獲取返回內容
        qDebug() << reply->readAll();
    }
}

讀到這里,這篇“Qt怎么實現HTTP的Get/Post請求”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

文昌市| 双流县| 乐亭县| 临沂市| 分宜县| 游戏| 建昌县| 富民县| 湖州市| 易门县| 进贤县| 德江县| 齐齐哈尔市| 汝城县| 上思县| 嘉峪关市| 赣州市| 曲阜市| 昌平区| 逊克县| 休宁县| 塔河县| 台前县| 石台县| 高尔夫| 阿坝县| 彭泽县| 灵丘县| 和硕县| 东乡县| 南木林县| 巧家县| 阜宁县| 巨鹿县| 上饶县| 阿合奇县| 金乡县| 秦皇岛市| 镇安县| 海兴县| 蓬安县|