qt使用http get和post
创始人
2024-03-17 00:00:57
0

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 
#include 
#include 
#include 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 
#include 
#include 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 
#include 
#include 
#include 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 
#include 
#include 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 login(Integer userId, String password)public ResponseEntity login(@RequestParam Map 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 login(Integer userId, String password)public ResponseEntity login(@RequestParam Map 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 login(@RequestBody User user)public ResponseEntity login(@RequestBody Map params)

使用multipart/form-data传送文件

http://127.0.0.1:18080/define/upload

#include 
#include 
#include 
#include 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 upload(@RequestParam("file") MultipartFile multipartFile)

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...