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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt4 如何使用QHttp实现post和get

發(fā)布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt4 如何使用QHttp实现post和get 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

nt頭文件:

// http.h #ifndef HTTP_H #define HTTP_H #include <QObject> #include <QBuffer> #include <QHttp> #include <QUrl>class Http: public QObject {Q_OBJECTpublic:Http(QObject *parent = 0);~Http();void setUrl(const QUrl &url);void setPort(quint16 port);void get();void post(const QString &script);bool error();QByteArray read();protected:QHttp *http;QUrl _url;QBuffer reply;quint16 _port;int _id;bool _error;protected slots:void requestStarted(int);void requestFinished(int, bool);void dataSendProgess(int, int);void dataReadProgess(int, int);void responseHeaderReceived();signals:void done(); }#endif // HTTP_H

源文件:

// http.cpp #include "http.h" #include <iostream>Http::Http(QObject *parent):QObject(parent) {http = new QHttp(this);_port = 80;connect(http,SIGNAL(requestStarted(int)),this,SLOT(requestStarted(int)));connect(http,SIGNAL(requestFinished(int,bool)),this,SLOT(requestFinished(int,bool)));connect(http,SIGNAL(dataSendProgress(int,int)),this,SLOT(dataSendProgess(int,int)));connect(http,SIGNAL(dataReadProgress(int,int)),this,SLOT(dataReadProgess(int,int))); } Http::~Http() {delete http;disconnect(this);QObject::~QObject(); }void Http::setUrl(const QUrl &url) {_url = url;} void Http::setPort(quint16 port) {_port = port;} void Http::get() {http->setHost(_url.host(),_port);_id = http->get(_url.path(),&reply); } void Http::post(const QString &script) {http->setHost(_url.host(),_port);_id = http->post(_url.path(),script,&reply); } bool Http::error() {return _error;} QByteArray Http::read() {return reply;}void Http::requestStarted(int id) {if (id != _id)return;std::cout << "正在連接至服務(wù)器"<< qPrintable(_url.host())<< " ..." << std::endl; } void Http::requestFinished(int id, bool error) {if (id != _id)return;std::cout << "正在斷開與服務(wù)器"<< qPrintable(_url.host())<< "的連接 ..." << std::endl;if (!error)std::cout << "成功與"<< qPrintable(_url.host())<< "交換數(shù)據(jù)" << std::endl;else{switch (http->error()){case QHttp::HostNotFound: std::cerr << "找不到指定服務(wù)器"<< qPrintable(_url.host())<< std::endl;break;case QHttp::ConnectionRefused: std::cerr << "服務(wù)器"<< qPrintable(_url.host())<< "拒絕連接請求" << std::endl;break;case QHttp::UnexpectedClose: std::cerr << "與服務(wù)器"<< qPrintable(_url.host())<< "的連接被服務(wù)器意外地關(guān)閉" << std::endl;break;case QHttp::InvalidResponseHeader: std::cerr << "響應(yīng)文件"<< qPrintable(_url.path())<< "無效" << std::endl;break;case QHttp::WrongContentLength: std::cerr << "數(shù)據(jù)長度失效" << std::endl;break;case QHttp::Aborted: std::cerr << "與服務(wù)器"<< qPrintable(_url.host())<< "的連接突然中斷" << std::endl;break;case QHttp::ProxyAuthenticationRequiredError: std::cerr << "與代理服務(wù)器的連接需要身份驗證" << std::endl;case QHttp::AuthenticationRequiredError: std::cerr << "與服務(wù)器"<< qPrintable(_url.host())<< "的連接需要身份驗證" << std::endl;break;default: std::cerr << "發(fā)生了一個未知錯誤" << std::endl;break;}} } void Http::dataSendProgess(int done, int total) {std::cout << "正在向服務(wù)器"<< qPrintable(_url.host())<< "發(fā)送數(shù)據(jù) ..." << std::endl<< "總數(shù)據(jù)大小: " << total << "KB" << std::endl<< "已發(fā)送數(shù)據(jù)大小: " << done << "KB" << std::endl<< "待發(fā)送數(shù)據(jù)大小: " << total-done << "KB" << std::endl<< "已發(fā)送數(shù)據(jù)占比: " << 100*done/total << "%" << std::endl<< "待發(fā)送數(shù)據(jù)占比: " << 100-100*done/total << "%" << std::endl; } void Http::dataReadProgess(int done, int total) {std::cout << "正在從服務(wù)器"<< qPrintable(_url.host())<< "接受數(shù)據(jù) ..." << std::endl;if (total)std::cout << "總數(shù)據(jù)大小: " << total << std::endl;std::cout << "已接受數(shù)據(jù)大小: " << done << std::endl;if (total)std::cout << "待接收數(shù)據(jù)大小: " << total-done << std::endl<< "已接受數(shù)據(jù)占比: " << 100*done/total << "%" << std::endl<< "待接受數(shù)據(jù)占比: " << 100-100*done/total << "%" << std::endl; }

代碼自己理解吧,這里發(fā)一個QHttp幫助文檔的鏈接,可以自己去看一看,不過是全英文的,可以用瀏覽器翻譯。這里給出一張post過程的流程圖。

Created with Rapha?l 2.2.0開始執(zhí)行post發(fā)射requestStarted(id)信號是否找到指定服務(wù)器指定文件是否有效上傳數(shù)據(jù)發(fā)射dataSendProgress(done,total)信號數(shù)據(jù)是否上傳完畢發(fā)射responseHeaderReceived(responseHeader)信號發(fā)射dataReadProgress(done,total)信號數(shù)據(jù)是否接受完畢發(fā)射readyRead()信號發(fā)射requestFinished(id,true)信號發(fā)射done(true)信號結(jié)束發(fā)射requestFinished(id,false)信號發(fā)射done(false)信號yesnoyesnoyesnoyesno

總結(jié)

以上是生活随笔為你收集整理的Qt4 如何使用QHttp实现post和get的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。