使用QT发送http/https的post请求并接收服务器reply
生活随笔
收集整理的這篇文章主要介紹了
使用QT发送http/https的post请求并接收服务器reply
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何使用QT內建API實現post請求,記錄一下
1、在工程的.pro文件中加入模塊
QT += network
2、新建一個類,頭文件代碼如下:
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: channel error; proto
- 下一篇: reply-code=503, repl