5.QT中关于HTTPClient相关的操作,Json数据传输


  1. 新建项目T12HttpClient

T12HttpClient.pro

SOURCES += \

    main.cpp

 

QT += network

CONFIG += C++11

main.cpp

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
 
int main(int argc,char* argv[])
{
    QCoreApplication app(argc, argv);
    QNetworkAccessManager* manager = new QNetworkAccessManager;
 
QNetworkRequest req;
//这里,我访问的是tomcat服务器
    req.setUrl(QUrl("http://localhost:8080/"));
    manager->get(req);
    QObject::connect(manager, &QNetworkAccessManager::finished, [](QNetworkReply* reply){
        if(reply->error() != QNetworkReply::NoError)
        {
            qDebug() << "Error:" << reply->errorString();
            return;
        }
        QByteArray buf = reply->readAll();
        qDebug() << "OK:"<< buf;
    });
 
    return app.exec();
}

运行结果:

 

Json数据传输

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonObject>
#include <QJsonDocument>
 
/**
 * json 数据传输
 * @brief main
 * @param argc
 * @param argv
 * @return 
 */
int main(int argc,char* argv[])
{
    QCoreApplication app(argc, argv);
    QNetworkAccessManager* manager = new QNetworkAccessManager;
 
    QJsonObject obj;
    obj.insert("username", QString("tuzuoquan"));
    obj.insert("password", QString("tuzuoquan's password"));
 
    QNetworkRequest req;
    req.setUrl(QUrl("http://XXX/test.cgi"));
    manager->post(req, QJsonDocument(obj).toJson());
    QObject::connect(manager, &QNetworkAccessManager::finished, [](QNetworkReply* reply){
        if(reply->error() != QNetworkReply::NoError)
        {
            qDebug() << "Error:" << reply->errorString();
            return;
        }
        QByteArray buf = reply->readAll();
        qDebug() << "OK:"<< buf;
    });
 
    return app.exec();
}

关于cgi的代码

 

#include <stdio.h>

#include <unistd.h>

 

#include <QCoreApplication>

#include <QTcpSocket>

#include <QJsonDocument>

#include <QJsonObject>

#include <QProcessEnvironment>

 

 

int main(int argc, char* argv[])

{

    printf("Content-type:text/html\n\n");

    QCoreApplication app(argc, argv);

 

    QProcessEnvironment envir =

        QProcessEnvironment::systemEnvironment();

 

    int contentLen = envir.value("CONTENT_LENGTH").toInt();

    QTcpSocket socket;

 

    socket.setSocketDescriptor(STDIN_FILENO,

            QTcpSocket::ConnectedState,

            QTcpSocket::ReadOnly);

 

    QByteArray buf;

   

    QObject::connect(&socket, &QTcpSocket::readyRead, [&](){

                buf += socket.readAll();

                if(buf.size()  == contentLen)

                {

                    QJsonDocument doc = QJsonDocument::fromJson(buf);

                    QJsonObject obj = doc.object();

#if 1

                    QString username = obj.value("username").toString();

                    QString password = obj.value("password").toString();

                    printf("username is %s; password is %s",

                        username.toUtf8().data(), password.toUtf8().data());

#else

                    QSqlTableModel model;

                    model.setTable("tuser");

                    model.setFilter("username='xx'");

                    model.select();

                    if(model.rowCount() == 1)

                        printf("Login success");

                    else

                        printf("Login Error");

#endif

                    app.quit();

                }

            });

 

    return app.exec();

}

上面的程序代码说明,我们可以通过post的方式顺便发送Json数据给服务器!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

涂作权的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值