今天我們介紹一下QT的http請求,這里有post和get兩種方式
一、post請求方式:參數分為網址和具體請求值兩個部分,有時候還需要設置頭信息,看具體情況定
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");//服務器要求的數據頭部 11 // requestInfo.setRawHeader("Accept","text/json,*/*;q=0.5");//服務器要求的數據頭部 12
13 //發送數據
14 QByteArray qByteHttpData = sendJson(); 15 QNetworkReply *reply = m_pHttpMgr->post(requestInfo, qByteHttpData); 16 //添加事件循環機制,返回后再運行后面的
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 //請求收到的結果
36 QByteArray responseByte = reply->readAll(); 37 }
二、get請求方式:參數和網址拼接到一起請求
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 //添加事件循環機制,返回后再運行后面的
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 //請求返回的結果
28 QByteArray responseByte = reply->readAll(); 29 qDebug() << responseByte; 30 }
三、主要區別:
get用於請求獲取數據,post向指定的資源創建修改數據
get把參數包含在URL中(長度有限制),POST通過請求實體傳遞參數(安全)