QT HTTPS HTTP 分别使用POST, put上发数据

1. 工程.pro配置

在这里插入图片描述

2. 相关头文件

#include <QSslSocket>
#include <QSslConfiguration>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkAccessManager>

public:
    void startRequestPersignurl(QUrl url);

private:
    QNetworkAccessManager *m_accessManager;
    
private slots:
  void http_get_persign_url(QNetworkReply *reply);
  void finishedSlot(QNetworkReply *reply);

3. https post相关QT代码实现

void MainWindow::startRequestPersignurl(QUrl url)
{
    QJsonDocument doc ;
    QByteArray post_Array;
    QNetworkRequest request ;
    QNetworkAccessManager *manager ;
    QJsonObject create_device_json ;
    QUrl baseUrl(url);
    /*SSL*/
    QSslConfiguration config = request.sslConfiguration();
    config.setPeerVerifyMode(QSslSocket::VerifyNone);
    config.setProtocol(QSsl::TlsV1SslV3);
    request.setSslConfiguration(config);
    request.setUrl(baseUrl);
    /*SSL*/
    manager = new QNetworkAccessManager(this);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

    /*构造json数据*/
    create_device_json.insert("access_id","ACMPGIYDEMLBMNUW65DQOJXW");
    create_device_json.insert("access_key","MUZTSMLDMVSTGLJTGA3GILJUMYYTKLLCMVRWMLLBMM4DCY3EGI2TMOBXGUFA");
    create_device_json.insert("machine_id","THE_ONE_MACHINE");
    create_device_json.insert("machine_mac","10-50-56-C0-00-12");
    create_device_json.insert("machine_type",111);
    create_device_json.insert("nonce","5612513737");
    doc.setObject(create_device_json);
    post_Array = doc.toJson(QJsonDocument::Compact);
    manager->post(request,post_Array);

    connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(http_get_persign_url(QNetworkReply *)));
}

void MainWindow::http_get_persign_url(QNetworkReply *reply)
{
    QVariant variant ;
    QJsonParseError jsonError;

    QByteArray rece = reply->readAll();
    qDebug() << QString(rece);
    ui->textBrowser->setText(QString(rece));
}

4. http put相关QT代码实现

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_accessManager = new QNetworkAccessManager(this);
 QObject::connect(m_accessManager,SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedSlot(QNetworkReply*)));
}


void MainWindow::on_pushButton_2_clicked()
{
    //GET
    QNetworkRequest request;
    request.setUrl(QUrl("http://www.baidu.com/s?wd=name"));
    m_accessManager->get(request);
}

void MainWindow::finishedSlot(QNetworkReply *reply)
{
     if (reply->error() == QNetworkReply::NoError)
     {
         qDebug() << "receive data success\r\n";
         QByteArray bytes = reply->readAll();
         qDebug()<<bytes;
         QString string = QString::fromUtf8(bytes);

         ui->textBrowser->setText(string.toUtf8());
     }
     else
     {
         qDebug()<<"handle errors here";
         QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
         //statusCodeV是HTTP服务器的相应码,reply->error()是Qt定义的错误码,可以参考QT的文档
         qDebug( "found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
         qDebug(qPrintable(reply->errorString()));
     }
     reply->deleteLater();
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用Qt和libcurl发送POST表单图片的示例代码: ```c++ #include <QtNetwork> #include <curl/curl.h> void sendPostFormImage() { // 1. 读取图片数据 QFile file("image.jpg"); if (!file.open(QIODevice::ReadOnly)) { qDebug() << "Failed to open file"; return; } QByteArray imageData = file.readAll(); file.close(); // 2. 设置POST表单数据 QString boundary = "---------------------------" + QString::number(QDateTime::currentMSecsSinceEpoch()); QByteArray postData; postData.append("--" + boundary + "\r\n"); postData.append("Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r\n"); postData.append("Content-Type: image/jpeg\r\n\r\n"); postData.append(imageData + "\r\n"); postData.append("--" + boundary + "--\r\n"); // 3. 设置libcurl参数 CURL* curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/upload"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData.data()); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, postData.size()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, QStringList() << "Content-Type: multipart/form-data; boundary=" + boundary.toLatin1().data()); curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0"); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); // 4. 执行请求 CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { qDebug() << "Failed to send POST form: " << curl_easy_strerror(res); } curl_easy_cleanup(curl); } } ``` 该示例使用Qt的QFile类读取图片数据,然后使用libcurl发送POST表单数据,其中包括一个包含图片数据的文件字段。boundary变量用于分隔不同的表单字段。最后,将Content-Type标头设置为"multipart/form-data"和boundary值,以便服务器正确解析数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的小熊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值