前幾天看到了一個關於Qt網絡相關操作的博客,裏面講述的是如何從百度裏面下載音樂和試聽音樂的,感覺挺神祕的,當然更多的是好奇,這樣利用這個東東不是以後可以做很多東西,可以從一些網站上獲取自己需要的信息,然後再將這些信息放入自己的APP應用啦!想到這些動力就強大起來啦!
首先我們還是需要對這個如何使用有點了解,可以通過百度MP3接口來了解我們的完成和實現的大概東西。當然我這裏也會講解一些。
相信通過對百度MP3接口的文章看過了都會知道我們這裏主要要做的是什麼?
首先用get的方式獲取數據:這個你是怎麼理解的,就是在人家的服務器裏獲得信息,然後再從這些信息裏獲得你想要的數據,然後再利用這些數據,我們還可以做一些我們想做的事情,就像那個文章中說到的,
假如我們的需求是要下載某位歌手的歌曲,可以
1首先通過關鍵字來獲取列表
http://mp3.baidu.com/dev/api/?tn=getinfo&ie=utf-8&word=<word>&format=<format>
參數:
word:歌曲名(歌手) format:可以使json也可以使xml
然後利用Get方式獲取你想要的格式的信息,然後從這些信息中找出你想要的東西
比如說你想要下載這些音樂,你就需要從剛纔那個返回的信息中找到歌曲的Id,然後通過
2.通過歌曲Id獲得歌曲的下載地址
http://ting.baidu.com/data/music/links?songIds=<songIds>
其中的songIds就是我們前面獲取到的
看到那個SONGLink了沒有,這個就是我們的鏈接下載的地址,歌詞就是那個lrcLink
ok,看到了這些我們需要的東西,但是我所疑問的我們如何使用get的方式來操作呢?
在Qt中提供了三個類來處理,他們分別是
QNetWorkAccessManager 管理類,執行post和get請求
QNetWorkRequest 請求類
QNetWorkReply 對迴應做處理
對於這個的比喻個人感覺好像你要去超市買東西,你問售貨員你要的東西在哪裏這是你發出了請求,當售貨員告訴你信息的時候,你通過這些信息去操作,大概類似吧!
ok,好啦!講完打給的原理後就直接上代碼啦!
首先需要在.pro文件裏面添加網絡模塊 QT += network
然後添加上我們操作相關的類
#include <QNetwork/QNetworkAccessManager>
#include <QNetwork/QnetworkRequest>
#include <QNetWork/QNetworkReply>
然後就開始操作啦!
networkMgr = new QNetworkAccessManager(this);
reply = networkMgr->get(QNetworkRequest(QUrl(//這裏可以寫入想要的鏈接地址)));
connect(reply,SIGNAL(finished()),this,SLOT(replyFinish()));
然後是對槽做處理
void httpwork::replyFinish()
{
QString result =QString( reply->readAll());
//然後我們將從這些信息中解析出我們需要的東西,這個我將在後面的博客中關於json的解析中講述
}
然後是對網絡模塊中post的操作,操作大概相同,只是一個是向服務器獲取信息,一個是向服務器發送信息,目前看到最多的是登錄驗證的操作
networkMgr = new QNetworkAccessManager();
QNetworkRequest networkrequst;
QByteArray bytearray;
然後將你需要的數據裝載進來
bytearray.append("user=admin&");
bytearray.append(pwd = 123456);
當然這些通常都會轉爲MD5的值來處理
然後將這些數據裝入QURL中,通過管理類的post請求發送處理,然後對結果進行處理就可以啦!
networkMgr->post(networkrequst(QUrl()),bytearray);
其他的都類似操作,後面會利用demo來實現,目前就只對原理講解
對於這個得實現相對比較簡單,重要的還是對數據的處理,通過對數據的處理獲得我們想要的東東這個再後面的博客將會講述關於Qt json的解析,當然你也可以看看