[后端开发]GET/POST_带参/不带参

#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();

}

如果这篇文章对你有帮助,别忘了点个关注,我会持续分享更多开发避坑与实战干货,下次更新你就能第一时间看到啦~

相关推荐
黄俊懿1 分钟前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第三节:CDN扩展-多地址直连
网络·计算机网络·架构·系统架构·cdn·dns·架构设计
码上成长16 分钟前
微前端 Invalid hook call?先把「window 注入 + externals」整明白
前端·react.js·前端框架
宿67417 分钟前
vue3-DOM树
前端·javascript·vue.js
白狐_7981 小时前
408数据结构:中缀转后缀与操作符栈容量——真题精讲
前端·javascript·数据结构
谷哥的小弟1 小时前
TypeScript在Vue3中的常见写法
前端·javascript·typescript
人间凡尔赛1 小时前
2026 前端全栈新范式:Server Actions + Edge Runtime,告别传统 API 路由
前端·全栈·next.js
苍何1 小时前
用 WorkBuddy / Codex + Obsidian 搭建自生长的个人知识库实战
后端
堕落年代1 小时前
Ollama CPU 推理大提示词优化实测报告(细致化数据版)
java·后端·spring
橘色的喵2 小时前
ARM-Linux 嵌入式库:内存池与信号量的无锁化改造
后端
SamDeepThinking2 小时前
写代码,到底应该参考优秀作品,还是坚持自己的想法?
后端