Qt网络编程post请求,数据格式为json或x-www-form-urlencoded

目录

Qt网络编程post请求,数据格式为json或x-www-form-urlencoded

一、.H文件

1、.h头文件

2、.h主代码

二、.CPP文件

1、主代码

 三、响应信息 返回结果(Josn数据格式输出)

四、Post数据格式参数及数据类型定义

1、Post:application/x-www-form-urlencoded数据类型格式

2、Post:application/json数据类型格式

五、测试请求模拟接口网站

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"));

以下是一个使用Qt实现GETPOST请求的方法,并且支持POST请求传递formdata参数,返回JSON数据: ```cpp #include <QtNetwork> #include <QJsonObject> #include <QJsonDocument> #include <QUrlQuery> QJsonObject sendRequest(QString url, QString method, QVariantMap formData = QVariantMap()) { QJsonObject responseData; // 创建请求对象 QNetworkRequest request(url); // 设置请求头 request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); // 创建请求管理器 QNetworkAccessManager manager; // 发送请求 QNetworkReply *reply = nullptr; if (method == "GET") { reply = manager.get(request); } else if (method == "POST") { QUrlQuery params; foreach (QString key, formData.keys()) { params.addQueryItem(key, formData.value(key).toString()); } QByteArray postData = params.toString(QUrl::FullyEncoded).toUtf8(); reply = manager.post(request, postData); } // 等待响应 QEventLoop loop; QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); loop.exec(); // 处理响应 if (reply->error() == QNetworkReply::NoError) { QByteArray data = reply->readAll(); QJsonDocument doc = QJsonDocument::fromJson(data); responseData = doc.object(); } else { qDebug() << "Error: " << reply->errorString(); } // 释放资源 reply->deleteLater(); return responseData; } ``` 此方法接收三个参数:URL、请求方法(GETPOST)、formdata参数(POST请求时可选,用于传递表单数据)。它返回一个JSON对象,是服务器响应的JSON数据。 例如,要发送一个POST请求并传递以下formdata参数: ```cpp QVariantMap formData; formData["name"] = "John"; formData["age"] = 30; formData["city"] = "New York"; QJsonObject responseData = sendRequest("http://example.com/api/users", "POST", formData); ``` 如果要发送GET请求,可以这样调用方法: ```cpp QJsonObject responseData = sendRequest("http://example.com/api/users", "GET"); ``` 请注意,此方法在主线程中发出网络请求,并等待响应。在实际应用中,应该使用Qt的信号和槽机制QFuture等工具来处理异步操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TryRestart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值