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

}

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

相关推荐
xcs194054 小时前
前端 vue 的前端页面debugger 进不去
前端·javascript·vue.js
代码什么用5 小时前
Spring基础使用
java·后端·spring
明月_清风5 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
蜗牛互联网6 小时前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端
Csvn6 小时前
框架性能优化
前端
回眸&啤酒鸭8 小时前
【回眸】OpenSwarm 多智能体协作系统实战指南
大数据·前端·人工智能
用户69371750013848 小时前
2026,程序员的时代拐点到了
android·前端·后端
大龄秃头程序员8 小时前
一次 iBeacon + BLE 无感解锁方案的实现记录
前端
惜鸟8 小时前
从源码看 pi 的上下文管理:原始数据永久保留,模型视角按需裁剪
后端
小兔子8 小时前
Python 的 GIL 与 free-threading:3.13 之后「去 GIL」走到哪一步了
前端