2010-11-18 144 views
4

我是Qt的新手。我安裝了Qt for VS2008並與我的VS2010集成。我只想知道如何發出HTTP請求。我讀過關於QtNetwork但QtHttp obselete。在Qt中發送HTTP請求

我也知道的libcurlcurlpp,但我有安裝它,並使其與Qt的工作問題。

你有什麼建議,QtNetworkcurlpp?如果QtNetwork,你能給我一個示例函數或一段代碼(以及使用什麼類)。如果curlpp(libcurl),請你指點我到哪裏我可以找到安裝它的步驟Qt(或善意解釋)?

非常感謝。

回答

6

的libcurlcurlpp是偉大的圖書館,但使用起來增加了一個依賴於你的項目,可能就可以避免。

Qt的最新版本推薦使用QNetworkAccessManager來發出網絡請求(包括http請求)並接收回復。

最簡單的方式來下載文件是:

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); 
manager->get(QNetworkRequest(QUrl("http://stackoverflow.com"))); 

replyFinished插槽被調用時,QNetworkReply對象,它需要作爲參數將包含下載數據以及元數據(頭,等等。)。

一個更完整的例子可以在Qt的例子中找到,你可以read here its source code

5

朱塞佩是對的,你不需要使用libcurl,curlpp和類似的庫。 不需要這個,Qt擁有一個簡單的工作課程。

請記住,發送請求和檢索答覆的標準方式是異步的。 您總是必須將經理完成(QNetworkReply *)信號連接到插槽。

如果您發送多個請求並且不想爲每個回覆添加一個插槽,則始終可以運行事件循環,並將管理器信號連接到事件循環quit()插槽。

事情是這樣的:

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
QEventLoop *eventLoop = new QEventLoop(); 
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), eventLoop, SLOT(quit()); 

manager->get(QNetworkRequest(QUrl("http://stackoverflow.com"))); 
eventLoop->exec(QEventLoop::ExcludeUserInputEvents); 

QByteArray replyData = reply->readAll(); 
... //do what you want with the data your receive from reply 

順便說一句。不知道你在做什麼。但如果它是一個移動應用程序,我建議你從VS切換到QtCreator IDE。它有一個很好的模擬器和一個用於移動設備測試的完整工具鏈。