Qt --- http客户端post JSON/form方式

Qt http客户端的实现

主要是post数据的打包和http的头设置

1.form-data表单方式

    //1.打包form-data表单数据
    QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
    QHttpPart textPart;
    //format
    textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"format\""));
    textPart.setBody(FORMAT);
    multiPart->append(textPart);
    //charset
    textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"charset\""));
    textPart.setBody(CHARSET);
    multiPart->append(textPart);
    //dateTime
    textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"dateTime\""));
    textPart.setBody(curDateTime.toString("yyyy-MM-ddTHH:mm:ss").toLatin1());
    multiPart->append(textPart);
    //sign
    textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"sign\""));
    textPart.setBody(sign.toLatin1());
    multiPart->append(textPart);

    multiPart->setBoundary("---你的分隔符---");       //设置分隔符,很重要!!!

    //2.构造URL,请求头
    QString Urlstr= "你的URL";
    QUrl url(Urlstr);
    //3构造请求头
    request.setUrl(url);
    //form-data方式
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("multipart/form-data;boundary=---你的分隔符---"));
    request.setRawHeader("Connection", "Keep-Alive");

    //4.post数据
    //发送请求
    QNetworkReply *reply = manager->post(request, multiPart);

    multiPart->setParent(reply); // delete the multiPart with the reply

2.x-www-form-urlencoded 表单方式

    //1.打包form表单数据
    QUrlQuery postData;
    postData.addQueryItem("key", QString(key));                              //密钥
    postData.addQueryItem("cmd", QString(CMD));                              //指令类型
    postData.addQueryItem("data", QString("112233"));                        //数据
    ...
    QByteArray data;
    data = postData.toString(QUrl::FullyEncoded).toUtf8();
    qDebug() << data;

    //2.构造请求授权url
    QString urlStr = "https://...你的URL...";
    qDebug() << "URL: " << urlStr;
    QUrl url(urlStr);

    //3.https支持
    QSslConfiguration conf = request.sslConfiguration();
    conf.setPeerVerifyMode(QSslSocket::VerifyNone);
    conf.setProtocol(QSsl::TlsV1_0);
//    conf.setProtocol(QSsl::SslV2);
//    conf.setProtocol(QSsl::TlsV1SslV3);
    request.setSslConfiguration(conf);

    //4.组织https的头
    request.setUrl(url);
    //application/x-www-form-urlencoded
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/x-www-form-urlencoded;charset=UTF-8"));
    request.setRawHeader("Connection", "Keep-Alive");
    request.setRawHeader("referer", referer.toLatin1());//自定义增加的头

    //5.发送请求
    manager->post(request, data);

3. JSON方式

    QJsonObject json;
    QJsonDocument jsonDoc;

    //1.打包json数据
    json["cmd"] = "CMD";                    //
    json["data"] = "0011";
    ...组织你的JSON串...

    jsonDoc.setObject(json);
    QByteArray dataArray = jsonDoc.toJson(QJsonDocument::Compact);
    qDebug() << "JSON_Data:" << dataArray;

    //2.构造URL,请求头
    QString Urlstr = "http://...你的URL...";
    qDebug() << "Urlstr: " << Urlstr << endl;
    QUrl url(Urlstr);
    //构造请求头
    request.setUrl(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8"));
    request.setRawHeader("Connection", "Keep-Alive");

    //3.post数据
    //发送请求
//    manager->post(request, dataArray);
    QNetworkReply *psamReply = manager->post(request, dataArray);

接收响应的处理,可以在构造函数中,加入:

    manager = new QNetworkAccessManager();
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotReplyFinished(QNetworkReply*)));

    //打印当前Qt版本支持的Network类型
    qDebug() << manager->supportedSchemes();

 

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Qt是一个跨平台的应用程序开发框架,可用于开发图形界面和网络应用程序。它的jsonhttp库提供了方便的方式来进行网络通信和数据交互。下面我将简要介绍在Qt中如何使用jsonhttp进行post数据到数据库。 首先,我们需要使用Qt的网络模块来发送HTTP POST请求。可以使用QNetworkAccessManager类来发送请求,并使用QNetworkRequest类来设置请求的URL、头信息和其他参数。然后,使用QNetworkReply类来接收服务器的响应。 接下来,我们需要将待发送的数据转换为json格式。可以使用QJsonDocument类来创建一个json文档对象,并使用QJsonObject和QJsonArray类来创建和操作json对象和数组。将需要发送的数据转换为json格式后,可以使用QJsonDocument的toJson()函数将其转换为QString类型的数据。 然后,将转换后的json数据添加到HTTP请求的body中。可以使用QHttpMultiPart类来创建一个multipart/form-data类型的数据实体,将json数据添加到其中,然后将该实体添加到HTTP请求的body中。 最后,发送HTTP请求,并接收服务器的响应。通过connect()函数以及相应的信号和槽函数来处理请求的发送和响应的接收。可以在槽函数中解析服务器响应的json数据,并根据需要将其存储到数据库中。 总结起来,使用Qtjsonhttp库进行数据库的post操作的步骤如下:创建并设置HTTP请求、将待发送的数据转换为json格式、将json数据添加到HTTP请求的body中、发送HTTP请求并接收服务器的响应、解析并处理响应的json数据。 以上是使用Qt进行jsonhttp和数据库操作的基本步骤,具体实现还需要结合具体的业务逻辑和数据库操作接口来进行。希望这些信息对您有所帮助! ### 回答2: Qt是一款跨平台的C++开发框架,可以方便地进行JSON数据的处理、HTTPPOST请求以及与数据库的交互。 首先,Qt提供了QJsonDocument类和相关的函数,可以方便地完成JSON数据的解析和生成。可以使用QJsonDocument::fromJson()函数将JSON数据转换为QJsonDocument对象,再使用QJsonObject和QJsonArray等类对JSON数据进行操作。另外,使用QJsonDocument::toJson()函数可以将QJsonDocument对象转换为JSON格式的字符串。 其次,Qt提供了QNetworkAccessManager类和相关的函数,可以方便地进行HTTPPOST请求。可以使用QNetworkRequest类设置请求的URL、请求头等信息,并使用QNetworkReply类获取服务器返回的数据。可以通过发送POST请求来将JSON数据发送给服务器,并在收到服务器返回的数据后进行处理。 此外,Qt还提供了QtSql模块,可以方便地与数据库进行交互。可以使用QSqlDatabase类来连接到数据库,并使用QSqlQuery类执行SQL语句。通过执行INSERT语句,可以将JSON数据存储到数据库中。同样,可以使用SELECT语句从数据库中读取数据,并将其转换为JSON格式进行处理和显示。 综上所述,使用Qt可以方便地完成JSON数据的处理、HTTPPOST请求以及与数据库的交互。可以通过QJsonDocument类解析和生成JSON数据,使用QNetworkAccessManager类发送HTTPPOST请求,以及使用QtSql模块与数据库进行交互,实现数据的存储和读取。对于JSON数据的处理,可以将其转换为QJsonObject和QJsonArray对象进行操作。对于HTTPPOST请求,可以通过QNetworkRequest类设置请求信息,并使用QNetworkReply类获取服务器返回的数据。对于数据库的操作,可以使用QSqlDatabase类连接数据库,并使用QSqlQuery类执行SQL语句。 ### 回答3: Qt 是一个跨平台的应用程序框架,可以用于开发各种类型的应用程序。在 Qt 中,可以使用 JSON 进行数据交换和存储。JSON 是一种轻量级的数据交换格式,易于阅读和编写。 在 Qt 中,可以使用 QJsonDocument 类来处理 JSON 数据。可以将 JSON 字符串转换为 QJsonDocument 对象,然后通过 QJsonValue 的方法获取其中的数据。还可以将 QVariantMap 或 QVariantList 转换为 JSON 字符串。 Qt 还提供了网络模块 QNetworkAccessManager,可以进行 HTTP 请求。可以使用 QNetworkRequest 类来设置请求的 URL、请求头和请求方法等信息。使用 QNetworkAccessManager 类的 post() 方法可以发送 HTTP POST 请求,并使用 QNetworkReply 类接收服务器的响应结果。 在进行数据库操作时,可以使用 Qt 的数据库模块。Qt 提供了 QSqlDatabase 类来管理数据库连接,可以连接各种不同类型的数据库。可以使用 QSqlQuery 类执行 SQL 查询和操作。 使用这些类和方法,可以实现从 HTTP POST 请求中获取到 JSON 数据,并将其存储到数据库中。首先,使用 QNetworkAccessManager 发送 HTTP POST 请求,接收到响应后,使用 QJsonDocument 解析响应的 JSON 数据。然后,将解析后的数据插入到数据库中,可以通过 SQL 语句执行插入操作。 总之,Qt 提供了强大而灵活的工具和模块,可以方便地实现 JSON 数据的解析、HTTP POST 请求和数据库操作。使用这些功能,可以快速地开发出具有数据交换和存储功能的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值