目录
Qt网络编程post请求,数据格式为json或x-www-form-urlencoded
一、.H文件
1、.h头文件
#include<QtNetwork/QNetworkRequest>
#include<QtNetwork/QNetworkReply>
#include<QtNetwork/QNetworkAccessManager>
2、.h主代码
private:
QNetworkAccessManager * network_manager;
private slots:
void post();
void postBack(QNetworkReply* reply);
二、.CPP文件
1、主代码
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
network_manager= new QNetworkAccessManager(this);
connect(network_manager,&QNetworkAccessManager::finished,this,&Widget::postBack);//通信完成后,自动调用getBack 方法
post(); //执行Post请求
}
void Widget::post()
{
//Post请求参数方法
QByteArray dataArray;
dataArray.append("INT_NAME=APIInfo&");
dataArray.append("REQ_TIME=2008-9-4 12:19:14&");
dataArray.append("REQ_ID=200894121914&");
dataArray.append("AUTH_ID=123456&");
dataArray.append("PARAM={\"ID\":\"1114444\",\"Code\":\"code1112222\",\"Name\":\"名称\",\"Flag\":\"1\",\"RequestTime\":\"2021-07-10 11:34:54\"}&");
dataArray.append("DATA_DIGEST=244cc13014bd0c703a55bf0d8a71e100");
//构造请求
QNetworkRequest request;
request.setUrl(QUrl("http://127.0.0.1:15738/WebService.asmx/APIInfo")); //请求地址
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
//发送请求
network_manager->post(request, dataArray);
}
void Widget::postBack(QNetworkReply* reply)
{
//qDebug()<<reply->readAll().data(); //输出所有响应内容
// 获取响应信息
QByteArray bytes = reply->readAll();
QJsonParseError jsonError;
QJsonDocument doucment = QJsonDocument::fromJson(bytes, &jsonError);
if (jsonError.error != QJsonParseError::NoError) {
qDebug() << QStringLiteral("解析Json失败");
return;
}
// 解析Json
if (doucment.isObject())
{
QJsonObject obj = doucment.object();
QJsonValue value;
if (obj.contains("data"))
{
value = obj.take("data");
if (value.isString())
{
QString data = value.toString();
qDebug() << data;
}
}
}
}
三、响应信息 返回结果(Josn数据格式输出)
{
"args": {},
"data": "",
"files": {},
"form": {
"AUTH_ID": "123456",
"DATA_DIGEST": "244cc13014bd0c703a55bf0d8a71e100",
"INT_NAME": "APIInfo",
"PARAM": "{\"ID\":\"1114444\",\"Code\":\"code1112222\",\"Name\":\"\u540d\u79f0\",\"Flag\":\"1\",\"RequestTime\":\"2021-07-10 11:34:54\"}",
"REQ_ID": "200894121914",
"REQ_TIME": "2008-9-4 12:19:14"
},
"headers": {
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,en,*",
"Content-Length": "329",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0",
"X-Amzn-Trace-Id": "Root=1-634cbd2d-5a6d5114396528ad56f5a558"
},
"json": null,
"origin": "153.140.13.18",
"url": "http://httpbin.org/post"
}
四、Post数据格式参数及数据类型定义
1、Post:application/x-www-form-urlencoded数据类型格式
//表单数据提交
QByteArray dataArray;
dataArray.append("INT_NAME=APIInfo&");
dataArray.append("REQ_TIME=2008-9-4 12:19:14&");
dataArray.append("REQ_ID=200894121914&");
dataArray.append("AUTH_ID=123456&");
dataArray.append("PARAM={\"ID\":\"1114444\",\"Code\":\"code1112222\",\"Name\":\"名称\",\"Flag\":\"1\",\"RequestTime\":\"2021-07-10 11:34:54\"}&");
dataArray.append("DATA_DIGEST=244cc13014bd0c703a55bf0d8a71e100");
//构造请求
QNetworkRequest request;
request.setUrl(QUrl("http://127.0.0.1:15738/WebService.asmx/APIInfo")); //请求地址
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
2、Post:application/json数据类型格式
// Json数据提交
QJsonObject json;
json.insert("INT_NAME", "APIInfo");
json.insert("REQ_TIME", "2008-9-4 12:19:14");
json.insert("REQ_ID", "200894121914");
json.insert("AUTH_ID", "123456");
json.insert("PARAM", "{\"ID\":\"1114444\",\"Code\":\"code1112222\",\"Name\":\"名称\",\"Flag\":\"1\",\"RequestTime\":\"2021-07-10 11:34:54\"}");
json.insert("DATA_DIGEST", "244cc13014bd0c703a55bf0d8a71e100");
QJsonDocument document;
document.setObject(json);
QByteArray dataArray = document.toJson(QJsonDocument::Compact);
//构造请求
QNetworkRequest request;
request.setUrl(QUrl("http://127.0.0.1:15738/WebService.asmx/APIInfo")); //请求地址
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
五、测试请求模拟接口网站
/*httpbin.org 这个网站能测试 HTTP 请求和响应的各种信息,比如 cookie、ip、headers 和登录验证等,且支持 GET、POST 等多种方法,对 web 开发和测试很有帮助。*/
request.setUrl(QUrl("http://httpbin.org/post"));
本文转载自: https://blog.csdn.net/lizaijinsheng/article/details/127357912
版权归原作者 TryRestart 所有, 如有侵权,请联系我们删除。
版权归原作者 TryRestart 所有, 如有侵权,请联系我们删除。