0


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

目录

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 json postman

本文转载自: https://blog.csdn.net/lizaijinsheng/article/details/127357912
版权归原作者 TryRestart 所有, 如有侵权,请联系我们删除。

“Qt网络编程post请求,数据格式为json或x-www-form-urlencoded”的评论:

还没有评论