您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“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庫。
先構造一個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(); } }
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請求”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。