Qt Http請求,post和get


今天我們介紹一下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通過請求實體傳遞參數(安全)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM