首页 > 其他分享 >Qt使用https协议发送带参数的post请求

Qt使用https协议发送带参数的post请求

时间:2022-10-24 14:55:56浏览次数:51  
标签:QtWidgetsApplication1 Qt url res void https post include

背景:

现在公司项目需要做一个检测更新的功能,通过访问后台接口,判断是否需要更新。

后台接口是 https 协议的,接口需要post请求,需要带参数,来判断是哪个软件需要做检测更新的操作。

客户端软件使用Qt写的

 

 

重点 & 注意事项:

1.https协议,需要用到 ssl,如果跑起来报错,基本都是 ssl 的问题,我的Qt版本是 5.12.10,需要安装:Win32OpenSSL-1_1_1q.msi,然后找到两个动态库(libcrypto-1_1.dll 、libssl-1_1.dll)放在exe同级目录

2.Win32OpenSSL 官方下载地址:https://slproweb.com/products/Win32OpenSSL.html

3.Win32OpenSSL 我自己下载的安装包,下载地址:https://www.aliyundrive.com/s/FqTfEDN9i83

 

 

 

思路清晰,代码简单,直接上代码:

.h

#pragma once

#include <QtWidgets/QDialog>
#include "ui_QtWidgetsApplication1.h"

#include "qmessagebox.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>

class QtWidgetsApplication1 : public QDialog
{
    Q_OBJECT

public:
    QtWidgetsApplication1(QWidget *parent = nullptr);
    ~QtWidgetsApplication1();

    QNetworkAccessManager* m_http;
    QNetworkReply* m_res;

public slots:
    void test();
    void testFinished();


private:
    Ui::QtWidgetsApplication1Class ui;
};

 

.cpp

#include "QtWidgetsApplication1.h"

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);
    connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(test()));
}

QtWidgetsApplication1::~QtWidgetsApplication1()
{}

void QtWidgetsApplication1::testFinished()
{
    if (m_res->error() == QNetworkReply::NoError)
    {
        QString ba = m_res->readAll();      // 自行解析接口返回数据
        QMessageBox::warning(this, "123", "345");
    }
    else
    {
        QMessageBox::warning(this, "123", m_res->errorString());
    }
}


void QtWidgetsApplication1::test()
{
    m_http = new QNetworkAccessManager();

    //设置头信息
    QNetworkRequest m_url;
    m_url.setUrl(QUrl("https://pmp.eloam.net/api/ota/findFadVersion"));
    m_url.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

    QSslConfiguration m_sslConfig = QSslConfiguration::defaultConfiguration();
    m_sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
    m_sslConfig.setProtocol(QSsl::TlsV1_2);
    m_url.setSslConfiguration(m_sslConfig);

    char cByte[1024] = "{\"as\":\"123456\", \"ks\": \"123456\", \"productCode\": \"HSPS\", \"version\": \"V1.2.3\"}";
    QByteArray bate(cByte);

    //发送数据
    m_res = m_http->post(m_url, bate);
    connect(m_res, &QNetworkReply::finished, this, &QtWidgetsApplication1::testFinished);

}

 

标签:QtWidgetsApplication1,Qt,url,res,void,https,post,include
From: https://www.cnblogs.com/shiyixirui/p/16821449.html

相关文章

  • Qt 设置窗口名称和图标
    1、设置应用程序名称在工程文件.pro文件中,修改Target为想设置的名称TARGET=exe_name2、设置主窗口标题1intmain(intargc,char*argv[])2{3if(QT_V......
  • Qt BUG解决:QWidget: Must construct a QApplication before a QWidget
    错误的原因:采用了静态(static)或者全局的QWidget类,静态对象在进入main函数之前就产生了,所以该QWidget在QApplication之前就产生了,产生如图所示的错误。解决方案:避免在类......
  • QT
    //绘制准备工作,启用反锯齿,平移坐标轴中心,等比例缩放QPainterpainter(this);painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing);......
  • QT网络
    //网络发送日志数据类QScopedPointer<SendLog>SendLog::self;SendLog*SendLog::Instance(){if(self.isNull()){staticQMutexmutex;QMutexLocker......
  • Qt小知识
    QStringListheadText;headText<<"文件名"<<"类型"<<"大小"<<"总行数"<<"代码行数"<<"注释行数"<<"空白行数"<<"路径";QList<int&......
  • Qt小知识
    QStringListheadText;headText<<"文件名"<<"类型"<<"大小"<<"总行数"<<"代码行数"<<"注释行数"<<"空白行数"<<"路径";QList<int&......
  • PostgresqlAndPostGis
    Postgresql&PostGis问题及解决方法关于postGIS没有template_postgis模版的问题解决//1、建立普通数据库createdatabasexx;//2、然后输入官网给的这几条添加......
  • 麒麟系统开发笔记(八):在国产麒麟系统上使用linuxdeployqt发布qt程序
    前言  在ubuntu上发布qt程序相对还好,使用脚本,但是在麒麟上发布的时候,因为银河麒麟等不同版本,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxde......
  • mqtt部署
    一下载mosquitto镜像dockerpulleclipse-mosquitto:latest二创建数据目录mkdir-pv/data/mosquitto/{config,data,logs}三修改mosquitto.conflistener18830.0.0.0消......
  • 关于什么时候用get请求和什么时候用post请求
    转:关于什么时候用get请求和什么时候用post请求 get和post方法功能类似的,使用建议:1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;2、在做......