QT实现发送get和post请求

        介绍下如何在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控件来展示信息

猜你喜欢

转载自blog.csdn.net/new9232/article/details/126352933