亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

江陵县| 大姚县| 昭通市| 锦州市| 连城县| 同德县| 合江县| 渝北区| 孟津县| 晋城| 定西市| 梧州市| 淮滨县| 林西县| 新竹县| 潍坊市| 普兰县| 门源| 荔浦县| 五峰| 多伦县| 牡丹江市| 新野县| 江津市| 张家界市| 子长县| 通州区| 阜新市| 顺平县| 临城县| 清河县| 肃北| 海门市| 盐山县| 特克斯县| 托里县| 昆明市| 中江县| 泰来县| 个旧市| 嫩江县|