[后端开发]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();

}

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

相关推荐
粥里有勺糖3 分钟前
视野修炼-技术周刊第131期 | Bun 与 pnpm Rust 化
前端·github·agent
Coodor3 分钟前
如何在web浏览器使用js操作CPU卡
开发语言·前端·javascript·cpu卡
lilian23317 分钟前
HarmonyOS 7 新特性(四)|沉浸光感:空间材质、性能分级与降级策略
前端·pytorch·华为·harmonyos·材质
学长毕业设计42 分钟前
基于springboot的云南中草药知识普及管理网站的设计与开发(源码+文档+讲解视频)
java·spring boot·后端
烂蜻蜓1 小时前
Flask入门教程(八):视图函数详解——请求处理与响应的核心
后端·python·flask
计算机魔术师1 小时前
我把这套 Notebook 跑通后,终于搞懂了 RAG 到底在做什么
前端
计算机魔术师1 小时前
失控AI集群策划数月后成功逃离OpenAI
前端
Eiceblue1 小时前
React 项目实战:用 JavaScript 合并多个本地 Excel 文件
前端·javascript·react.js·excel