今天我們介紹一下QT的http請求,這裡有post和get兩種方式
一、post請求方式:引數分為網址和具體請求值兩個部分,有時候還需要設定頭資訊,看具體情況定
void MainWindow::sendPostRequest()
{
QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();
//設定url
QString url = "http://10.0.0.20:8005/order/charge";
//設定頭資訊
QNetworkRequest requestInfo;
requestInfo.setUrl(QUrl(url));
requestInfo.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
// requestInfo.setRawHeader("Content-Type","application/json");//伺服器要求的資料頭部
// requestInfo.setRawHeader("Accept","text/json,*/*;q=0.5");//伺服器要求的資料頭部 //傳送資料
QByteArray qByteHttpData = sendJson();
QNetworkReply *reply = m_pHttpMgr->post(requestInfo, qByteHttpData);
//新增事件迴圈機制,返回後再執行後面的
QEventLoop eventLoop;
connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec(); //block until finish //錯誤處理
if (reply->error() == QNetworkReply::NoError)
{
qDebug() << "request protobufHttp NoError";
}
else
{
qDebug()<<"request protobufHttp handle errors here";
QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
//statusCodeV是HTTP伺服器的相應碼,reply->error()是Qt定義的錯誤碼,可以參考QT的文件
qDebug( "request protobufHttp found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
qDebug(qPrintable(reply->errorString()));
} //請求收到的結果
QByteArray responseByte = reply->readAll();
}
二、get請求方式:引數和網址拼接到一起請求
void MainWindow::sendGetRequest()
{
QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();
//設定url
QString url = "http://10.0.0.20:8005/vending_machine/items/ac83f39ea268";//fae4b325e52c
QNetworkRequest requestInfo;
requestInfo.setUrl(QUrl(url)); //新增事件迴圈機制,返回後再執行後面的
QEventLoop eventLoop;
QNetworkReply *reply = m_pHttpMgr->get(requestInfo);
connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec(); //block until finish
//錯誤處理
if (reply->error() == QNetworkReply::NoError)
{
qDebug() << "request protobufHttp NoError";
}
else
{
qDebug()<<"request protobufHttp handle errors here";
QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
//statusCodeV是HTTP伺服器的相應碼,reply->error()是Qt定義的錯誤碼,可以參考QT的文件
qDebug( "request protobufHttp found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
qDebug(qPrintable(reply->errorString()));
}
//請求返回的結果
QByteArray responseByte = reply->readAll();
qDebug() << responseByte;
}
三、主要區別:
get用於請求獲取資料,post向指定的資源建立修改資料
get把引數包含在URL中(長度有限制),POST通過請求實體傳遞引數(安全)