今天我們介紹一下QT的http請求,這里有post和get兩種方式
一、post請求方式:參數(shù)分為網(wǎng)址和具體請求值兩個部分,有時候還需要設置頭信息,看具體情況定
1 void MainWindow::sendPostRequest()
2 {
3 QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();
4 //設置url
5 QString url = "http://10.0.0.20:8005/order/charge";
6 //設置頭信息
7 QNetworkRequest requestInfo;
8 requestInfo.setUrl(QUrl(url));
9 requestInfo.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
10 // requestInfo.setRawHeader("Content-Type","application/json");//服務器要求的數(shù)據(jù)頭部
11 // requestInfo.setRawHeader("Accept","text/json,*/*;q=0.5");//服務器要求的數(shù)據(jù)頭部
12
13 //發(fā)送數(shù)據(jù)
14 QByteArray qByteHttpData = sendJson();
15 QNetworkReply *reply = m_pHttpMgr->post(requestInfo, qByteHttpData);
16 //添加事件循環(huán)機制,返回后再運行后面的
17 QEventLoop eventLoop;
18 connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
19 eventLoop.exec(); //block until finish
20
21 //錯誤處理
22 if (reply->error() == QNetworkReply::NoError)
23 {
24 qDebug() << "request protobufHttp NoError";
25 }
26 else
27 {
28 qDebug()<<"request protobufHttp handle errors here";
29 QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
30 //statusCodeV是HTTP服務器的相應碼,reply->error()是Qt定義的錯誤碼,可以參考QT的文檔
31 qDebug( "request protobufHttp found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
32 qDebug(qPrintable(reply->errorString()));
33 }
34
35 //請求收到的結(jié)果
36 QByteArray responseByte = reply->readAll();
37 }
二、get請求方式:參數(shù)和網(wǎng)址拼接到一起請求
1 void MainWindow::sendGetRequest()
2 {
3 QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();
4 //設置url
5 QString url = "http://10.0.0.20:8005/vending_machine/items/ac83f39ea268";//fae4b325e52c
6 QNetworkRequest requestInfo;
7 requestInfo.setUrl(QUrl(url));
8
9 //添加事件循環(huán)機制,返回后再運行后面的
10 QEventLoop eventLoop;
11 QNetworkReply *reply = m_pHttpMgr->get(requestInfo);
12 connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
13 eventLoop.exec(); //block until finish
14 //錯誤處理
15 if (reply->error() == QNetworkReply::NoError)
16 {
17 qDebug() << "request protobufHttp NoError";
18 }
19 else
20 {
21 qDebug()<<"request protobufHttp handle errors here";
22 QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
23 //statusCodeV是HTTP服務器的相應碼,reply->error()是Qt定義的錯誤碼,可以參考QT的文檔
24 qDebug( "request protobufHttp found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
25 qDebug(qPrintable(reply->errorString()));
26 }
27 //請求返回的結(jié)果
28 QByteArray responseByte = reply->readAll();
29 qDebug() << responseByte;
30 }
三、主要區(qū)別:
get用于請求獲取數(shù)據(jù),post向指定的資源創(chuàng)建修改數(shù)據(jù)
get把參數(shù)包含在URL中(長度有限制),POST通過請求實體傳遞參數(shù)(安全)
GET |
POST |
|
后退按鈕/刷新 |
無害 |
數(shù)據(jù)會被重新提交(瀏覽器應該告知用戶數(shù)據(jù)會被重新提交)? |
書簽 |
可收藏為書簽 |
不可收藏為書簽 |
緩存 |
能被緩存 |
不能被緩存 |
編碼類型 |
application/x-www-form-urlencoded |
application/x-www-form-urlencoded或multipart/form-data.為進制數(shù)據(jù)使用多重編碼 |
歷史 |
參數(shù)保留在瀏覽器歷史中 |
參數(shù)不會保留在瀏覽器歷史中 |
對數(shù)據(jù)長度的限制 |
是的。當發(fā)送數(shù)據(jù)時,GET方法向URL添加數(shù)據(jù);URL的長度是受限制的(URL 的最大長度是2048個字符)? |
無限制 |
對數(shù)據(jù)類型的限制 |
只允許ASCII字符。 |
沒有限制。也允許二進制數(shù)據(jù)。 |
安全性 |
POST相比,GET的安全性較差,因為所發(fā)送的數(shù)據(jù)是URL的一部分。 在發(fā)送密碼或其他敏感信息時絕不要使用GET ! |
POST比GET更安全,因為參數(shù)不會被保存在瀏覽器歷史或web服務器日志中 |
可見性 |
數(shù)據(jù)在URL中對所有人都是可見的文章來源:http://www.zghlxwxcb.cn/news/detail-610888.html |
數(shù)據(jù)不會顯示在URL中文章來源地址http://www.zghlxwxcb.cn/news/detail-610888.html |
到了這里,關(guān)于QT之Http請求的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!