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

时间: 2024-08-11 08:21:17

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

Qt中与文件目录相关操作

一.与文件目录操作有关操作. Qt中与文件目录相关的操作在QDir中,需加入#include <QDir>语句. QDir::drives()是列出电脑根目录下的所有目录,返回的是QFileInfoList.利用其返回的QFileInfo,可以使用QFileInfo::absoluteFilePath()方法为返回其绝对路径.  Bool QDir::exists ( const QString & name ) 是判断以参数中为路径名的路径是否存在,如果存在该路径则返回真. bool

MongoDB中数组类型相关的操作

概述 在MongoDB的模式中,我们经常将一些数据存储到数组类型中,即我们常见的嵌套模式设计的一种实现方式.数组的这种设计实现方式在关系数据库中是没有或者说不常见的.所以,通过本文我们来梳理一下MongoDB的数组的相关操作.关于数组的操作可以分成两类,一类是数组操作符,另一个是数组运算修饰符.  数组操作符 操作符 实现功能 $ 根据查询选择器定位要更新的文档 $push 添加值到数组中 $pushAll 添加数组到一个数组中.(将被$rach取代) $addToSet 添加值到数组中,重复了

3.QT中的debug相关的函数,以及文件锁的使用

 1  新建项目T33Debug main.cpp #include <QDebug> #include <QFile> #include <QMutex>   //文件锁 void MyMessageHandler(QtMsgType type,const QMessageLogContext &context,const QString &msg) { //使用一个文件锁,当在写文件的时候,要等写完之后才能继续执行 static QMutex m

[译]在Javascript中进行日期相关的操作

本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU&list=PL6n9fhu94yhUA99nOsJkKXBqokT3MBK0b 在Javascript里制造date对象的话要用到Date() constructor 以下的例子将当前的日期和时间显示在页面上 document.write(new Date()); 如果Date() construc

在Android中使用自带API操作Json

Json简介 JavaScript对象表示法(JavaScript Object Notation) 是存储和交换文本信息的语法 特点 是轻量级的文本数据交换格式 独立于语言和平台 具有自我描述性,更易理解 Json与XML 类似XML,比XML更小.更快.更易解析 没有结束标签 更短 读写的速度更快 使用数组 不使用保留字 Json语法 是JavaScript对象表示法语法的子集 数组在键值对中 数据由逗号分隔 大括号保存对象 中括号保存数组 Json值可以是 数字(整数或浮点数) 字符串(在

Qt学习笔记:Qt中使用Lua

今天想在Qt中使用Lua进行数据操作 结果发现在Qt中使用Lua的文章较少,虽然很简单,但是还是写出来提供入门,顺便记录一下 我使用的是Qt Creator 3.4.2,用的是mingw4.9.2的编译器 我在Lua官网下载lua版本是5.3.1 首先,在要Qt中进行编译Lua,拿到.a和dll这两个文件 在Qt Creator->文件->新建文件或项目->Library->C++库,接下来根据情况一路下一步完成创建 然后,右键自己的项目,选择添加现有文件,添加下载好的Lua文件中

C#操作JSON学习

JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在各种网络.平台和程序之间传输.JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成. JSON与XML的比较◆可读性JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解.◆文件大小与传输XML允许使用方便的标签,所以文件尺寸是要比JSON大的.而且JSON源

.NET操作JSON

http://www.cnblogs.com/txw1958/archive/2012/08/01/csharp-json.html JSON文件读入到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串.操作JSON通常有以下几种方式:1. 原始方式:自己按照JSON的语法格式,写代码直接操作JSON字符串.如非必要,应该很少人会走这条路,从头再来的. 2. 通用方式[★★★★★]: 这种方式是使用开源的类库Newtonsoft.Json(下载地址http://json.code

第32课 Qt中的文件操作

1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操作中的关键函数接口——IO操作的本质:连续存储空间的数据读写 ①打开设备:bool open(OpenMode mode); ②读取数据:QByteArray read(qint64 maxSize); ③写入数据:qint64 write(const QByteArray& byteArray);