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

}

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

相关推荐
kfaino17 小时前
码农的AI翻身(三)你好,我叫 Embedding
后端·ai编程
葫芦和十三17 小时前
图解 MongoDB 18|复制集拓扑:Primary、Secondary 和 Arbiter 的分工
后端·mongodb·面试
爱勇宝17 小时前
大多数人不是在使用 AI 赚钱,而是在帮 AI 公司赚钱
前端·后端·程序员
冬奇Lab18 小时前
每日一个开源项目(第143篇):page-agent - 纯 JS 的网页 GUI Agent,无需截图、无需插件、无需后端
前端·人工智能·agent
程序员cxuan20 小时前
虽迟但到!GPT-5.6 终于来了!
人工智能·后端·程序员
IT_陈寒1 天前
React的这个渲染问题连官方文档都没说清楚
前端·人工智能·后端
葫芦和十三1 天前
图解 MongoDB 15|journal 与持久化:写入怎么不丢,崩溃怎么恢复
后端·mongodb·面试
葫芦和十三1 天前
图解 MongoDB 16|压缩:snappy、zstd 和 zlib 的取舍
后端·mongodb·面试
苍何1 天前
终于找到免费开源TTS模型,克隆声音不要钱,本地电脑也能跑
后端
用户593608741401 天前
Spring AI 集成 DeepSeek 原生供应商并实现think模式
后端