在當今的網際網路世界中,就算是桌機應用程式,與伺服器或其他遠程資源進行通訊也已經是不可避免的。
Qt 提供了一系列的函式庫,使得進行網路請求變得非常簡單。今天,我們就要學習怎麼使用 Qt 發送和接收網路請求。
而今天的「網路通訊」是在一個新的 NetWork 模組中。所以首先你需要在你的 .pro 檔案中加入 network 模組:
QT += network
接著,在程式碼中引入必要的標頭檔:
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
讓我們開始發送一個簡單的 GET 請求:
QNetworkAccessManager manager;
QUrl url("https://api.thecatapi.com/v1/images/search?limit=1");
QNetworkRequest request(url);
QNetworkReply* reply = manager.get(request);
connect(reply, &QNetworkReply::finished, [=]() {
if (reply->error() == QNetworkReply::NoError) {
QString data = reply->readAll();
// 處理資料
} else {
// 處理錯誤
}
reply->deleteLater();
});
我們使用 QNetworkAccessManager 來發送一個 GET 請求。當請求完成時後,讀取回覆的資料。這裡我們呼叫了免費的 the cat api,每次呼叫都會回傳一張貓咪的圖片。
如果你想要發送一個 POST 請求,可以這麼做:
QNetworkAccessManager manager;
QUrl url("https://api.example.com/upload");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
QByteArray postData = R"({"key": "value"})"; // 假設你要發送 JSON 資料
QNetworkReply* reply = manager.post(request, postData);
connect(reply, &QNetworkReply::finished, [=]() {
if (reply->error() == QNetworkReply::NoError) {
QString response = reply->readAll();
// 處理回覆資料
} else {
// 處理錯誤
}
reply->deleteLater();
});
QNetworkReply 物件提供了一個 error() 函數,這讓你可以檢查請求是否成功。如果有錯誤,你可以用 errorString() 取得比較詳細的錯誤訊息。