qt使用http get和post

news/2024/11/30 7:52:58/

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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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);//通信完成后,自动执行getBackget(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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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);//通信完成后,自动执行getBackpost(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-urlencodedrequest.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.ppmy.cn/news/1512.html

相关文章

跟着实例学Go语言(二)

本教程全面涵盖了Go语言基础的各个方面。一共80个例子&#xff0c;每个例子对应一个语言特性点&#xff0c;非常适合新人快速上手。 教程代码示例来自go by example&#xff0c;文字部分来自本人自己的理解。 本文是教程系列的第二部分&#xff0c;共计20个例子、约1.2万字。 …

9.2、面向对象高级特性(类方法和静态方法、property类属性、单例模式)

文章目录类方法和静态方法property类属性单例模式基于装饰器实现使用_ _ new _ _方法实现面向对象总结类方法和静态方法 类里面定义的方法称为实例方法&#xff0c;python解释器会自动将对象&#xff08;或实例&#xff09;传入方法【pycharm中会自动将self传入&#xff0c;se…

DiffuSEEG:一种基于stable diffusion 的SEEG数据补全方法

目录一. 立体脑电图&#xff08;SEEG&#xff09;1.1 SEEG概念1.2 SEEG作用1.3 SEEG的适用场景1.4 操作方法一. 立体脑电图&#xff08;SEEG&#xff09; 1.1 SEEG概念 立体脑电图&#xff08;SEEG&#xff09;&#xff1a;是一种借助外科微创的方法将电极植入到大脑不同的部…

图像处理:模糊图像判断

目录 上期回顾 采用Laplace算子的原因 实现的效果 图片素材 代码的展示与讲解 效果展示 项目资源 上期回顾 上一次的图像清晰度评价没有成功&#xff0c;主要的原因是那几张图像清晰度评价函数都实际都采用了梯度求解&#xff0c;不同的场景灰度的明暗不同&#xff0c;…

SpringBoot项目--如何不停服更新应用?

原文网址&#xff1a;SpringBoot项目--如何不停服更新应用&#xff1f;_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java后端项目如何不停机更新服务。 在生产环境中&#xff0c;一般都会每个服务部署多个实例。只要多于1个实例&#xff0c;就可以不停服更新应用。 不停服…

【从零开始玩量化13】quantstats:分析你的量化策略

背景 之前总结了一些获取量化数据的途径&#xff0c;数据是一个量化策略的“原材料”&#xff0c;接下来要考虑的问题就是如何使用这些数据。 本文&#xff0c;介绍一个量化指标分析工具quantstats&#xff0c;利用它可以很方便的分析你的策略。 Github地址&#xff1a;https…

Objective-C中weak实现原理

Objective-C的对象采用引用计数来管理内存&#xff0c;如果对象被强持有&#xff0c;这个对象的引用计数会增加&#xff0c;如果对象被弱持有&#xff0c;这个对象的引用计数不会增加。弱持有也就是weak如何实现的呢&#xff1f;首先看下weak相关底层实现用到的数据结构&#x…

使用xlsxwriter简单的将截图插入excel表格中

1.xlsxwriter插入图片 原因&#xff1a; 有个小项目需要测出数据&#xff0c;然后把仪表上截图给插入excel中。 在网上查了一下&#xff0c;发现用xlsxwriter插入图片挺方便的。 import xlsxwriterduang xlsxwriter.Workbook("data.xlsx") sheet duang .add_work…