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数据给服务器!

 

           

猜你喜欢

转载自blog.csdn.net/qq_44884269/article/details/89468873
今日推荐