[C++]Qt网络请求:一个函数搞定GET/POST 📅 发布时间:2026/8/24 16:15:33 👁 浏览次数: 本文给出从前端拿取数据的办法下面为C代码#include QCoreApplication #include QNetworkAccessManager #include QNetworkRequest #include QNetworkReply #include QUrl #include QJsonDocument #include QJsonObject #include QDebug #include QTimer // 通用网络请求函数支持 GET/POST传入URL和请求数据POST用 void sendHttpRequest(QNetworkAccessManager manager, const QUrl url, const QString method GET, const QJsonObject postData QJsonObject()) { QNetworkRequest request(url); // 1. 设置通用请求头JSON格式必加 request.setHeader(QNetworkRequest::ContentTypeHeader, application/json); // 2. 解决跨平台/跨域可能的问题添加通用头 request.setRawHeader(Accept, application/json); // 3. 禁用缓存GET/POST都适用避免旧响应干扰 request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); QNetworkReply *reply nullptr; if (method.compare(POST, Qt::CaseInsensitive) 0) { // POST请求将JSON对象转为字节数组 QByteArray jsonBytes QJsonDocument(postData).toJson(QJsonDocument::Compact); reply manager.post(request, jsonBytes); } else { // GET请求无数据体 reply manager.get(request); } // 4. 处理响应Lambda表达式捕获外部变量 QObject::connect(reply, QNetworkReply::finished, []() { if (reply-error() QNetworkReply::NoError) { QByteArray data reply-readAll(); QJsonParseError parseError; QJsonDocument doc QJsonDocument::fromJson(data, parseError); if (parseError.error QJsonParseError::NoError) { if (doc.isObject()) { qDebug() method 响应JSON对象 doc.object(); } else if (doc.isArray()) { qDebug() method 响应JSON数组 doc.array(); } } else { qDebug() method 响应不是JSON格式原始数据 data; } } else { // 打印详细错误信息排查POST失败关键 qDebug() method 请求失败 reply-errorString(); qDebug() 错误码 reply-error(); qDebug() 响应状态码 reply-attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); } reply-deleteLater(); }); } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 配置目标地址替换为你的实际IP端口接口 QUrl url(http://目标IP:目标端口/接口路径); QNetworkAccessManager manager; // 1. 发送 GET 请求 sendHttpRequest(manager, url, GET); // 2. 发送 POST 请求 // 构造POST的JSON数据根据后端接口要求修改字段 QJsonObject postData; postData.insert(username, test); postData.insert(password, 123456); // 延迟发送POST可选避免两个请求同时发送导致的竞争 QTimer::singleShot(1000, []() { sendHttpRequest(manager, url, POST, postData); }); // 3. 超时保护可选防止程序卡死 QTimer::singleShot(5000, a, QCoreApplication::quit); // 5秒后自动退出 return a.exec(); }如果这篇文章对你有帮助别忘了点个关注我会持续分享更多开发避坑与实战干货下次更新你就能第一时间看到啦