日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

使用QT发送http/https的post请求并接收服务器reply

發布時間:2023/12/3 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用QT发送http/https的post请求并接收服务器reply 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何使用QT內建API實現post請求,記錄一下

1、在工程的.pro文件中加入模塊

QT += network
2、新建一個類,頭文件代碼如下:

#ifndef HTTP_POST_H #define HTTP_POST_H #include <QObject> #include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkRequest> #include <QtNetwork/QNetworkReply> class ALPostFile : public QObject {Q_OBJECT public:/*構造函數,參數為服務器的URL地址*/ALPostFile(QString addr);~ALPostFile();/*類實例化之后,可以調用這個函數重新設置服務器URL地址*/void setServerAddr(QString addr){m_strServerAddr = addr;}/*設置要發送的文件路徑并調用start函數開始post*/void setPostFilePath(QString filePath){m_strFilePath = filePath;start();}/*開始發送post請求給服務器*/void start();signals: //從服務器返回的數據,retCode=200 表示成功void sigReplyMessage(int retCode,QString msg); private slots:/*服務器的回復信息將在這個回調函數中處理(用QT的話說是槽函數)*/void replyFinished(QNetworkReply *reply);/*post請求發生錯誤的話會進入這個回調函數*/void upLoadError(QNetworkReply::NetworkError errorcode);/*這個函數記錄post發送進度*/void OnUploadProgress( qint64 bytesSent, qint64 bytesTotal ); private:QString m_strServerAddr;QString m_strFilePath;QNetworkAccessManager * m_pNetWorkManager = NULL;QNetworkReply * m_pReply=NULL;}; #endif // HTTP_POST_H

3、對應的源文件代碼如下:

#include "http_post.h" #include <QUrlQuery> #include <QFile> #include <QDebug> #include <QMessageBox> #include <QDialog> #include <QNetworkConfigurationManager> #include <json/cJSON.h> using namespace std; ALPostFile::ALPostFile(QString addr){m_pNetWorkManager = new QNetworkAccessManager();m_strServerAddr = addr;connect(m_pNetWorkManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply *))); } ALPostFile::~ALPostFile(){delete m_pNetWorkManager; } void ALPostFile::start(){//如果未設置url和文件路徑直接返回if(m_strFilePath.isEmpty() || m_strServerAddr.isEmpty()){return;}QFile file(m_strFilePath);if (!file.open(QIODevice::ReadOnly)||file.size()==0){qDebug() << "file open failed" <<endl;file.close();return ;}/*讀取文件內容*/QByteArray fdata = file.readAll();qDebug()<<"file contant = "<<QString::fromStdString(fdata.toStdString())<<endl;/*如果文件內容為空,直接返回*/if(fdata.isEmpty()){qDebug() << "file is empty" <<endl;return;}file.close();QNetworkRequest request;/*設置服務器地址*/request.setUrl(m_strServerAddr);/*設置通用信息頭*/request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");//request.setHeader(QNetworkRequest::ContentLengthHeader, data.size());/*發送post請求*/m_pReply=m_pNetWorkManager->post(request,fdata);/*設置回調函數*/connect(m_pReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(upLoadError(QNetworkReply::NetworkError)));connect(m_pReply, SIGNAL(uploadProgress ( qint64 ,qint64 )), this, SLOT( OnUploadProgress(qint64 ,qint64 ))); } void ALPostFile::replyFinished(QNetworkReply *reply){QByteArray ba = reply->readAll();QString infor=QString::fromStdString(ba.toStdString());qDebug()<<"information from server= "<<infor<<endl;const char* server_json_buf=ba.toStdString().data();cJSON* server_json=cJSON_Parse(server_json_buf);if(server_json!=NULL){cJSON* status_json=cJSON_GetObjectItem(server_json,"status");if(status_json->valueint==200){QMessageBox::information(main_window,(QString)"上傳結果",(QString)"上傳成功");}else{QMessageBox::information(main_window,(QString)"上傳結果",(QString)"上傳失敗");}cJSON_Delete(server_json);} } void ALPostFile::upLoadError(QNetworkReply::NetworkError errorcode){ } void ALPostFile::OnUploadProgress( qint64 bytesSent, qint64 bytesTotal ){//qDebug() <<"OnUploadProgress func" <<bytesSent<< "/"<<bytesTotal<<endl;}

使用方法很簡單,類實例化之后,先后調用setServerAddr、setPostFilePath兩個方法設置URL和要上傳的文件路徑(相對路徑絕對路徑都可以),由于在setPostFilePath方法中已經調用了start方法,因此沒有必要再調用start方法。
經過測試,可以成功上傳一個內容為json格式的文件,但是只可以用http上傳,https的話會報錯,因為我的電腦沒有SSL安全證書的庫文件,如果一定要使用https的話,需要下載SSL對應的庫文件供你的應用程序使用,具體操作看[這個文章]。(https://www.cnblogs.com/BlogPuppet/p/12790092.html)
有問題的地方可以留言問我,也可以加QQ1061721998,如果好用的話,還請爸爸們給個贊。

總結

以上是生活随笔為你收集整理的使用QT发送http/https的post请求并接收服务器reply的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。