介绍下如何在qt程序中给http服务端发送get和post请求,首先你要有一个http服务端,下面直接贴下代码
.pro
QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
widget.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtNetwork>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_get_clicked();
void on_pushButton_post_clicked();
void receiveReplyGet(QNetworkReply *reply);
void receiveReplyPost(QNetworkReply *reply);
private:
Ui::Widget *ui;
QNetworkAccessManager *managerGet;
QNetworkAccessManager *managerPost;
QNetworkRequest reqGet;
QNetworkRequest reqPost;
QNetworkReply *replyGet;
QNetworkReply *replyPost;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
managerGet = new QNetworkAccessManager(this);
managerPost = new QNetworkAccessManager(this);
connect(managerGet, &QNetworkAccessManager::finished, this, &Widget::receiveReplyGet);
connect(managerPost, &QNetworkAccessManager::finished, this, &Widget::receiveReplyPost);
}
Widget::~Widget()
{
delete ui;
}
// 发送get请求
void Widget::on_pushButton_get_clicked()
{
//设置url
reqGet.setUrl(QUrl("https://www.csdn.net"));
// 设置请求头
reqGet.setRawHeader("accept", "*/*");
reqGet.setRawHeader("accept-language", "zh-CN");
// 发送get请求
replyGet = managerGet->get(reqGet);
}
// 发送post请求
void Widget::on_pushButton_post_clicked()
{
// 设置url
reqPost.setUrl(QUrl("http://www.test.com"));
// 设置请求头
reqPost.setRawHeader("accept", "*/*");
reqPost.setRawHeader("Accept-Language", "zh-CN");
reqPost.setRawHeader("Content-Type", "application/json;charset=UTF-8");
reqPost.setRawHeader("tenantId", "1");
//设置请求数据(我这里发送的是json格式数据)
char cByte[1024] = "{\"data\":\"test\"}";
QByteArray byte(cByte);
// 发送post请求
replyPost = managerPost->post(reqPost, byte);
}
// 接收http响应
void Widget::receiveReplyGet(QNetworkReply *reply)
{
// 获取状态码
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// 获取响应数据
QString reply_data = reply->readAll();
ui->plainTextEdit->appendPlainText(QString::number(status_code));
ui->plainTextEdit->appendPlainText(reply_data);
}
// 接收http响应
void Widget::receiveReplyPost(QNetworkReply *reply)
{
// 获取状态码
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// 获取响应数据
QString reply_data = reply->readAll();
ui->plainTextEdit->appendPlainText(QString::number(status_code));
ui->plainTextEdit->appendPlainText(reply_data);
}
ui界面代码就不贴了,分别是两个按钮控件发送get和post请求和一个plainTextEdit控件来展示信息