91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

蕲春县| 株洲县| 新密市| 金川县| 讷河市| 任丘市| 县级市| 赫章县| 新邵县| 平潭县| 翼城县| 禄丰县| 大冶市| 中西区| 易门县| 乌审旗| 松潘县| 新蔡县| 凤冈县| 象山县| 会同县| 张掖市| 汪清县| 庆阳市| 乐都县| 阳城县| 衡水市| 赣榆县| 四川省| 蓝山县| 普宁市| 长垣县| 浠水县| 郎溪县| 莱阳市| 东至县| 鄯善县| 汉阴县| 固镇县| 霍林郭勒市| 商水县|