5.QT中关于HTTPClient相关的操作,Json数据传输
新建项目T12HttpClient
|
T12HttpClient.pro |
|
SOURCES main.cpp QT CONFIG |
|
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数据给服务器! |
5.QT中关于HTTPClient相关的操作,Json数据传输的更多相关文章
- Qt中与文件目录相关操作
一.与文件目录操作有关操作. Qt中与文件目录相关的操作在QDir中,需加入#include <QDir>语句. QDir::drives()是列出电脑根目录下的所有目录,返回的是QFil ...
- C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET
C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET C++ STL中Map的相关排序操作:按Key排序和按Value排序 分类: C ...
- Head First Python-Python中与文件相关的操作-读、处理、写
最近在看head first python,前面也写了一些笔记,但是基本上没有涉及到一些完整的代码,现在将书中的文件相关操作的代码整理,供以后参考. 主要分为两大部分,读取文件.处理异常,处理文件.存 ...
- MongoDB中数组类型相关的操作
概述 在MongoDB的模式中,我们经常将一些数据存储到数组类型中,即我们常见的嵌套模式设计的一种实现方式.数组的这种设计实现方式在关系数据库中是没有或者说不常见的.所以,通过本文我们来梳理一下Mon ...
- 3.QT中的debug相关的函数,以及文件锁的使用
1 新建项目T33Debug main.cpp #include <QDebug> #include <QFile> #include <QMutex> ...
- [译]在Javascript中进行日期相关的操作
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- PyQt学习随笔:Qt中Model/View相关的主要类及继承关系
View相关类类继承关系: Model相关类类继承关系:
- Qt中的主窗口之菜单栏
1.Qt中的主窗口 主窗口为建立应用程序用户界面提供了一个框架 Qt开发平台中直接支持主窗口的概念 QMainWindow是Qt中主窗口的基类 QMainWindow继承于QWidget是一种容器类型 ...
- Qt中对QDomDocument和QDomnode的理解
一.对QDomDocument和QDomnode的理解 QDom前缀的都是代表节点类型.所以有,QDomElement代表一个Element节点,而QDomText代表一个Text节点.QDomNod ...
随机推荐
- [bzoj4864][BeiJing 2017 Wc]神秘物质
来自FallDream的博客,未经允许,请勿转载,谢谢. 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研 ...
- C语言第二次作业-----顺序结构
一:改错题 (1)输出指定信息: 将给定源代码输入编译器: 执行编译命令,发现编译器报错,错误信息如下: 经检查,发现源程序将"stdio.h"误拼为"stido.h&q ...
- 构建纯TypeScript应用
构建纯TypeScript应用 现在只有命令行应用的例子. 前言 现在,应用开发的趋势是命令行接口应用和Web应用. node.js 和 typescript的崛起所以,这里讨论如何创建纯的TypeS ...
- jvm(四):垃圾回收
垃圾回收我们主要从以下三个方面进行描述 垃圾对象的判断 目前判断对象为垃圾对象有两种方法:引用计数法,可达性分析法,目前普遍是的是可达性分析法 可达性分析法的实现原理: 定义gcroot一直往下找,如 ...
- python笔记五(条件判断/循环/break和continue)
一 条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> ...
- PHP Zip File 函数
通过 PHP 中的相关函数,你可以实现 zip 文件的解压缩操作! PHP Zip File 简介 Zip File 函数允许您读取压缩文件. 安装 如需在服务器上运行 Zip File 函数,必须安 ...
- Linux(八)用户管理
8.1 基本介绍 Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账户,然后以这个账户身份进入系统. Linux的用户需要至少要属于一个组. 8 ...
- Android Design Support Library使用详解——Snackbar
Google在2015 I/O大会上,给我们带来了更加详细的Material Design规范,同时也引入了Android Design Support Library,为我们提供了基于Materia ...
- ZooKeeper之(四)配置与命令
4.1 配置文件 ZooKeeper安装好之后,在安装目录的conf文件夹下可以找到一个名为"zoo_sample.cfg"的文件,是ZooKeeper配置文件的模板. ZooKe ...
- 使用Spring Boot开发Web项目
前面两篇博客中我们简单介绍了Spring Boot项目的创建.并且也带小伙伴们来DIY了一个Spring Boot自动配置功能,那么这些东西说到底最终还是要回归到Web上才能体现出它的更大的价值,so ...