在 Qt 中,你可以使用 QNetworkAccessManager
对象的 sendCustomRequest
方法来发送同步的 HTTP 请求。以下是一个演示如何使用该方法发送同步 HTTP POST 请求的示例代码:
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建 QNetworkAccessManager 对象
QNetworkAccessManager manager;
// 准备要发送的数据,这里使用 JSON 格式的数据
QJsonObject json;
json["username"] = "john_doe";
json["email"] = "john@example.com";
json["password"] = "securePassword123";
QJsonDocument postData(json);
QByteArray postDataByteArray = postData.toJson();
// 创建请求
QNetworkRequest request(QUrl("http://example.com/api/users"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
// 发送 POST 请求并等待响应
QNetworkReply *reply = manager.sendCustomRequest(request, "POST", postDataByteArray);
// 等待响应完成
while (!reply->isFinished()) {
a.processEvents(); // 处理事件循环,确保 UI 不会冻结
}
// 处理服务器的回复
if(reply->error() == QNetworkReply::NoError){
// 请求成功
QByteArray responseData = reply->readAll();
// 处理服务器返回的数据
} else {
// 请求失败
qDebug() << "Error: " << reply->errorString();
}
// 释放 reply
delete reply;
return a.exec();
}
在这个示例中,我们使用 QNetworkAccessManager
对象的 sendCustomRequest
方法,并将请求方法设置为 "POST",并在请求中包含 JSON 格式的数据。在发送请求后,我们使用一个循环来等待回复,确保在收到服务器回复前继续处理事件循环,以避免 UI 的冻结。
请注意,在实际应用中,使用同步请求可能会造成 UI 的阻塞,因此建议尽量使用异步的请求方式。如果必须使用同步请求,请确保在新线程中执行,以避免对用户界面的影响。