最近需要使用Qt开发Http发送数据和文件。遇到一些小问题,记录下重点。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <unistd.h> #include <QTextCodec> #include <QColor> #include <stdio.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this) //设置程序编码格式为utf-8 QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); //设置需要上传的url baseUrl = "http://192.168.1.100/api/program/led_display.vsn"; QUrl url(baseUrl); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json;charset=utf-8"); //此处要注意上传的ContentType,json文本的话一般带这个参数即可,如果不是,请查阅其他资料,配置其他参数。 //[Http状态码content-type](https://www.runoob.com/http/http-content-type.html) request.setUrl(url); manager = new QNetworkAccessManager(this); // 连接信号槽 connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); // 构造数据,我是直接从文件中读取,简化拼装数据过程 QFile lfile("./display.json"); lfile.open(QFile::ReadOnly); dataArray = lfile.readAll(); lfile.close(); // 发送请求 manager->post(request, dataArray); } //返回帧接收 void MainWindow::replyFinished(QNetworkReply *reply) { //1、获取响应状态码 variant = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); if (variant.isValid()) { qDebug() << variant.toInt(); } //2、获取响应头 variant = reply->header(QNetworkRequest::ContentTypeHeader); if (variant.isValid()) qDebug() << variant.toString(); //3、获取响应信息 QByteArray bytes = reply->readAll(); qDebug() << bytes ; ui->textBrowser->append(bytes); } //头文件.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QtNetwork> #include <QDebug> #include <QString> #include <QVariant> #include <QHttpMultiPart> #include <QFile> class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); public slots: void replyFinished(QNetworkReply *reply); private: Ui::MainWindow *ui; QString baseUrl ; QByteArray dataArray ; QNetworkRequest request; QNetworkAccessManager *manager ; QVariant variant ; } #endif // MAINWINDOW_H这样的话,可以发送Json格式的数据了,其他格式数据只是content-type不一样,然后组装数据正确即可。
注:转载请注明出处。QQQQ