qt使用http get和post

news2024/9/21 19:11:56

qt使用http get和post

本文目录

    • qt使用http get和post
      • 准备
      • get请求
        • widge.h
        • widget.cpp
      • post请求
        • widge.h
        • widget.cpp
      • post请求的数据格式
        • 参数写在url后面
        • 使用application/x-www-form-urlencoded
        • 使用application/json
        • 使用multipart/form-data传送文件

准备

使用到网络编程,需要在Pro文件中加入如下语句

QT       += network

get请求

widge.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkAccessManager>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void get(QString str);
    void getBack(QNetworkReply* reply);

private slots:
    void on_pushButton_2_clicked();

private:
    Ui::Widget *ui;
    QNetworkAccessManager * manager;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QJsonObject>
#include <QJsonDocument>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_2_clicked()
{
    QString str = ui->lineEdit_2->text();

    manager = new QNetworkAccessManager(this);
    connect(manager,&QNetworkAccessManager::finished,this,&Widget::getBack);//通信完成后,自动执行getBack
    get(str);
}


void Widget::get(QString str)
{
    // 构造请求
    QNetworkRequest request;
    request.setUrl(QUrl(str));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    // 发送请求
    manager->get(request);

}


void Widget::getBack(QNetworkReply* reply)
{
    ui->textEdit_2->setText(reply->readAll().data());
}

post请求

widge.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkAccessManager>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void post(QString str);
    void postBack(QNetworkReply* reply);

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    QNetworkAccessManager * manager;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QJsonObject>
#include <QJsonDocument>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    QString str = ui->lineEdit->text();

    manager = new QNetworkAccessManager(this);
    connect(manager,&QNetworkAccessManager::finished,this,&Widget::postBack);//通信完成后,自动执行getBack
    post(str);

}

//具体实现代码参考下面的分类情况
void Widget::post(QString str)
{
    QByteArray dataArray;
    ...
    request.setUrl(QUrl(str));
    // 发送请求
    manager->post(request, dataArray);

}


void Widget::postBack(QNetworkReply* reply)
{
    ui->textEdit->setText(reply->readAll().data());
}

post请求的数据格式

参数写在url后面

跟get一样,dataArray为空即可

http://127.0.0.1:18080/define/login?userId=1&password=123

void Widget::post(QString str)
{
    // 表单数据
    QByteArray dataArray;
    // 构造请求
    request.setUrl(QUrl(str));
    //可以不写,都能识别,默认为x-www-form-urlencoded
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    // 发送请求
    manager->post(request, dataArray);
}
content-type missing in HTTP POST, defaulting to application/x-www-form-urlencoded. Use QNetworkRequest::setHeader() to fix this problem.

对应的后端接口

public ResponseEntity<Map> login(Integer userId, String password)

public ResponseEntity<Map> login(@RequestParam Map<String, String> params)

使用application/x-www-form-urlencoded

form表单数据被编码为key1=value1&key2=value2格式发送到服务器

http://127.0.0.1:18080/define/login

使用QByteArray

void Widget::post(QString str)
{
    // 表单数据
    QByteArray dataArray;
    dataArray.append("userId=1&");
    dataArray.append("password=123");
    // 构造请求
    request.setUrl(QUrl(str));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    // 发送请求
    manager->post(request, dataArray);
}

或使用QString转utf8

void Widget::post(QString str)
{
    // 表单数据
    QString ss = "userId=1&password=123";
    // 构造请求
    request.setUrl(QUrl(str));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    // 发送请求
    manager->post(request, ss.toUtf8());
}

postman访问接口

对应的后端接口

public ResponseEntity<Map> login(Integer userId, String password)

public ResponseEntity<Map> login(@RequestParam Map<String, String> params)

使用application/json

内容数据为Json对象

http://127.0.0.1:18080/define/login

void Widget::post(QString str)
{
    // Json数据
    QJsonObject json;
    json.insert("userId", "1");
    json.insert("password", "123");

    QJsonDocument document;
    document.setObject(json);
    QByteArray dataArray = document.toJson(QJsonDocument::Compact);

    request.setUrl(QUrl(str));

    request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json;charset=utf-8"));

    // 发送请求
    manager->post(request, dataArray);

}

postman访问接口

对应的后端接口

public ResponseEntity<Map> login(@RequestBody User user)

public ResponseEntity<Map> login(@RequestBody Map<String, String> params)

使用multipart/form-data传送文件

http://127.0.0.1:18080/define/upload

#include <QJsonObject>
#include <QFile>
#include <QJsonDocument>
#include <QHttpMultiPart>

void Widget::post(QString str)
{
    QString filePath = "/Users/xx/qthttp.jpg";
    QFile* file = new QFile(filePath);
    file->open(QIODevice::ReadOnly);

    QHttpMultiPart* multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);

    QHttpPart imagePart;
    imagePart.setHeader(QNetworkRequest::ContentDispositionHeader,
                      QVariant(QString("form-data; name=\"file\";filename=\"qthttp.jpg\";")));
    imagePart.setBodyDevice(file);
    multiPart->append(imagePart);

    // 构造请求
    QNetworkRequest request;
    request.setUrl(QUrl(str));

    // 发送请求
    manager->post(request, multiPart);
}

对应的后端接口

public ResponseEntity<Map> upload(@RequestParam("file") MultipartFile multipartFile)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx配置实例-反向代理

1、实现效果 打开浏览器&#xff0c;在浏览器地址栏输入地址www.123.com&#xff0c;访问tomcat主页面。 2、准备工作 &#xff08;1&#xff09;在 liunx系统安装tomcat&#xff0c;使用默认端口8080 上传安装文件&#xff0c;并解压缩到/opt/tomcat。 进入tomcat的bin目录中…

[附源码]Python计算机毕业设计Django人员信息管理

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

ArrayList为什么线程不安全以及三种解决办法【详细】

目录不安全原因解决办法VectorCollectionsCopyOnWriteArrayList三种解决方式总结不安全原因 我们可以看一下ArrayList源码&#xff0c;找到add方法&#xff0c; public boolean add(E e) {ensureCapacityInternal(size 1); // Increments modCount!!elementData[size] e;r…

【java】Lambda表达式

文章目录体验Lambda表达式Lambda表达式的标准格式Lambda表达式的练习抽象方法无参无返回值抽象方法带参无返回值抽象方法带参带返回值Lambda表达式的省略模式Lambda表达式的注意事项Lambda表达式和匿名内部类的区别体验Lambda表达式 package heima.Lambda;import heima.多线程.…

HTML5期末大作业:旅游网页设计与实现——旅游风景区网站HTML+CSS+JavaScript 景点静态网页设计 学生DW静态网页设计

&#x1f468;‍&#x1f393;静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计&#x1f469;‍&#x1f393;&#xff0c;一般的网页作业需要融入以下知识点&#xff1a;div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

JMeter入门教程(9) --参数化

文章目录1.任务背景2.任务目标3.任务实操3.1 CSV数据文件1.任务背景 参数化是测试过程中很常用的一种技巧&#xff0c;可以将脚本中的某些输入用参数来代替&#xff0c;比如登陆时传递参数&#xff0c;在脚本运行时指定参数的取值范围和规则 2.任务目标 掌握基于JMeter性能测…

【浅学Java】SpringBoot创建和使用

SpringBoot创建和使用1. SpringBoot是什么2. SpringBoot的优点3. SpringBoot的创建3.1 使用idea创建3.2 测试项目_输出hello3.3 网页版创建SpringBoot4. 约定大于配置1. SpringBoot是什么 Spring的诞生是为了简化Java开发而创建的&#xff0c;而SpringBoot的诞生就是为了简化S…

一文带你理解【自然语言处理(NLP)】的基本概念及应用

觉得有帮助请点赞关注收藏~~~ 1.1 自然语言处理 1.1.1 自然语言处理主要研究对象 自然语言处理&#xff08;Natural Language Processing&#xff1a;NLP&#xff09;是以人类社会的语言信息&#xff08;比如语音和文本&#xff09;为主要研究对象&#xff0c;利用计算机技术来…

C++:深拷贝和浅拷贝——拷贝构造、赋值构造必须自定义

https://www.bilibili.com/video/BV1qT4y1X7cQ/?spm_id_from333.337.search-card.all.click&vd_sourced33b44674c517c8b7928e8d3ac316b37 1、赋值运算符重载 浅拷贝的错误代码&#xff1a; class Distance { public:int* dis NULL;Distance(int a){dis new int(a);}~…

轻量级xshell+manager远程监控jvisualvm

一、服务器端&#xff08;Linux&#xff0c;最小安装模式&#xff0c;没有图形界面&#xff09; 1.安装xauth 如果在Xshell中配置了X11转发后&#xff0c;出现如下提示&#xff1a; WARNING! The remote SSH server rejected X11 forwarding request. 则需要查看/etc/ssh/s…

esxi 6.7下安装openwrt(iStoreOS)网卡直通

esxi 6.7下安装openwrt&#xff08;iStoreOS&#xff09;网卡直通 esxi上创建一个iStoreOS系统的虚拟机&#xff0c;当主路由使用&#xff0c;网卡直通方式 1、工具 硬件&#xff1a; 工控机&#xff1a;装有esxi6.7系统&#xff08;192.168.100.2&#xff09;&#xff0c;配…

图像仿射变换与双线性插值

图像变换 下面的所有变换假设都是针对一幅图像&#xff0c;即一个三维数组&#xff08;HWC&#xff09;&#xff0c;这里为简单起见&#xff0c;假设图像都是单通道&#xff08;C1&#xff09;的。 (x,y)(x,y)(x,y): 原图像中某一点 A 的位置(x′,y′)(x′,y′)(x′,y′): 变换…

记一次系统重装后电脑的优化设置

总目录 文章目录总目录前言一、Windows设置1.系统2.应用3.隐私4.更新与安全二、系统使用偏好设置1.设置远程协助2.文件资源管理器偏好设置3.用户账户控制设置4.修改桌面文件的路径5.根据需求删除系统自带的无用的软件总结前言 由于之前总是电脑用着用着C盘不是满了&#xff0c…

Spring框架(九):Spring注解开发Annotation

Spring注解开发引子如何用注解替代xml基础配置Bean可以加一些注解来实现原有的xml文件的功能Component注解及其衍生注解依赖注入AutowireSpring非自定义的注解开发Spring其他注解注解的原理解析-xml方式注解的原理解析-注解方式注解整合MyBatis框架注解整合第三方框架引子 痛定…

一篇文章让你搞懂Java顺序表

目录 一、 线性表的基本介绍 二、顺序表 1、顺序表的概念 2. 创建顺序表类&#xff08;ArrayList&#xff09; 2. 增加元素 3. 删除元素 4. 修改某个元素 5. 查找元素 Main类 在数据结构体系中我们将整个数据结构分为两类&#xff0c;一类是线性结构&#xff1b; 线性…

微电网两阶段鲁棒优化经济调度方法(完美复现)

针对微电网内可再生能源和负荷的不确定性&#xff0c;建立了 min-max-min 结构的两阶段鲁棒优化模型&#xff0c;可得到最恶劣场 景下运行成本最低的调度方案。模型中考虑了储能、需求侧 负荷及可控分布式电源等的运行约束和协调控制&#xff0c;并引入了 不确定性调节参数&…

Java基于springboot+vue+element医疗用品销售购物商城系统 前后端分离

开发背景和意义 网络购物己经成为一个常态化的消费手段&#xff0c;足不出户即可享受互联网发展的红利&#xff0c;对于购物商城的应用&#xff0c;普通消费者目前普遍使用。医疗用品作为一个大众消费的商品&#xff0c;由于其健康的特点&#xff0c;也越来越为大家喜欢&#…

TypeScript 知识点总结

对于有着强制类型语言经验的开发来讲&#xff0c;刚开始接触 JavaScript 的时候&#xff0c;大多都有一种 “心如芒刺&#xff0c;如鲠在喉” 的感觉。 从最初的好感 -——开放包容&#xff0c;到后来的厌恶之情——放荡不羁 TypeScript 犹如黑暗之中的一缕阳光&#xff0c;拯救…

【单片机基础】ADC0832详解

文章目录一、ADC0832介绍1、功能特点2、引脚说明3、ADC0832与单片机接口4、工作时序二、例程一、ADC0832介绍 ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小&#xff0c;兼容性&#xff0c;性价比高而深受单片机爱好者及企业欢迎&#x…

Java_笔记_static_静态变量方法工具类_main方法

static表示静态&#xff0c;是Java中的一个修饰符&#xff0c;可以修饰成员方法和成员变量。 一、静态变量: 被static修饰的成员变量 1.特点&#xff1a; 1&#xff09;被该类所有的对象共享。 2&#xff09;不属于对象&#xff0c;属于类。 3&#xff09;随着类的加载而加载…