qt使用http get和post
创始人
2024-04-16 20:32:04
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)

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...