1.前言
小編在這里講一下,下面的內容僅供學習參考,切莫用于商業活動,一經被相關人員發現,本小編概不負責!讀者切記切記,

2.獲取音樂播放串列
其實,這就是小編要講的重點,因為就是這部分用到了加密,
我們在搜索欄上輸入我們想聽的音樂,小編輸入:刺客

- 是不是看到了一系列音樂,怎樣得到這些音樂的一些資訊呢?(這里指的音樂資訊是指音樂的hash值和音樂的album_id值【這兩個引數在獲取音樂的下載鏈接那里會用到】,當然還包括音樂的名稱【不然怎么區別呢?】),
- 由于這一系列音樂是動態加載出來的,也就是如果直接決議這個界面的資料,根本得不到,這個時候我們就應該來到如下這個界面了,

是不是可以看到我們剛才看到的那些音樂了,而且展開其中一首音樂,可以發現上述小編講的哪些資訊好像都有了呀!
我們看一下這個請求的網址吧!發現這是一個get請求,請求資料如下:

- 小編搜索了多首歌曲,發現它們的請求引數有一個共同點,那就是除了keyword、clienttime、mid、uuid和signature這幾個引數值不同之外,其他的都差不多,而clienttime本意就是客戶端時間,它的值是一個時間戳,mid和uuid的值和clienttime一樣的,keyword它的值就是我們搜索的關鍵詞,現在我們需要的就是搞懂signature這個引數值到底是什么呀!
- 小編得到這個signature引數值的長度為32,覺得應該是使用了加密,將一些初始資料,把它加密得到的,那么怎樣得到這個初始資料呢?
- 小編點擊了這個網站所有的js檔案,發現這個引數值在這個js檔案下

- 是不是看到了md5這個函式呀!這應該就是那個加密函式了吧!而o.join("")就應該是那個初始資料了,o是一個js陣列,
- 現在知道要獲取o的值,怎樣獲取呢?肯定是使用斷點呀!我們在signature周圍打上相應的斷點,然后執行斷點操作(這個小編就不一一贅述了,小編使用js斷點還是有一點懵逼的,就不在這里誤導大家了),


- 上述圖片就是那個js陣列o中的值了,經過對這些資料進行分析,發現其實這其中絕大部分值就是我們請求網址的哪些引數值,讀者覺得呢?

- 整個加密演算法如下:

- 這也太長了吧!原本小編打斷使用python來模擬這個加密程序,但是現在小編看到這么長,放棄了,但是并不代表加密程序就無法實作,小編查閱資料,發現原來python可以執行js陳述句,我們是不是只需結合python和js,就能實作這個加密了呢?開干!
- 代碼如下:

- 看看運行結果吧!

- 是不是這樣就獲取我們想要的資料了呀!我們只需使用json決議這些資料,就可以獲取小編在上面提到的那兩個引數了,【音樂的hash值和音樂的album_id值】
3. 得到歌曲的下載鏈接
- 在上述第二點那里講到音樂的hash值和音樂album_id值,為什么要提到它們倆呢?當然是為了給第第三點這里做鋪墊的哈!

- 這個程序小編不會講的很詳細,因為小編今天講的重點是這個加密哈!

我們點擊一首歌播放,來到上述界面,可以看到歌曲的下載鏈接,這個請求的引數如下:

- 這些請求引數中是不是看到我提到的那兩個引數呀!
- 通過分析發現,其實只需以下三個引數即可請求成功!如下


- 相應的代碼小編就不一一發出來了,相信聰明的讀者看了小編的本篇博客,定然可以實作酷狗音樂的下載,不懂的問題讀者可以到評論區問我哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303053.html
標籤:python
