華數(shù)TV視頻的地址解析下載

以華數(shù)TV播放頁地址 http://www.wasu.cn/Play/show/id/7882670 為例沪斟,說明如何得到視頻的真實地址宇攻。

打開瀏覽器的開發(fā)者工具查看加載播放頁面時的網(wǎng)絡(luò)請求对蒲,經(jīng)分析發(fā)現(xiàn),從頁面加載到視頻開始播放俏让,依次出現(xiàn)如下相關(guān)請求:

http://www.wasu.cn/Api/getPlayInfoById/id/7882670/datatype/xml
http://apiontime.wasu.cn/Auth/getVideoUrl?id=7882670&key=11ac882a1f434800cf661ae5dbd81ca4&url=aHR0cDovL3ZvZHBjLWFsLndhc3UuY24vcGNzYW4xMi9tYW1zL3ZvZC8yMDE2MTAvMjcvMTcvMjAxNjEwMjcxNzE5MTYwOTQ5NzQ1NmQxNi5tcDQ=
http://vodpc-al.wasu.cn/pcsan12/mams/vod/201610/27/17/2016102717191609497456d16.mp4?auth_key=97f712597251633ab91f611e75b058ff-1477935556-f8dc297b46735af55223e73d3e3af535-&vid=7882670&cid=4&start=3165&end=3170&version=P2PPlayer_V.4.1.0

從字面來看笔咽,第1個接口請求用來獲取播放信息,第2個接口請求用來獲取視頻地址蔫巩,第3個請求就是視頻的真實地址了谆棱。

獲取播放信息

播放信息獲取接口 http://www.wasu.cn/Api/getPlayInfoById/id/7882670/datatype/xml 中的7882670即為視頻ID,在視頻播放頁地址中可以提取到批幌。

請求該接口础锐,我們發(fā)現(xiàn)返回如下有用信息:

<mp4>
       <hd1>aHR0cDovL3ZvZHBjLWFsLndhc3UuY24vcGNzYW4xMi9tYW1zL3ZvZC8yMDE2MTAvMjcvMTcvMjAxNjEwMjcxNzE5MTYwOTQ5NzQ1NmQxNi5tcDQ=</hd1>
       <hd4>aHR0cDovL3ZvZHBjLWFsLndhc3UuY24vcGNzYW4xMi9tYW1zL3ZvZC8yMDE2MDkvMTgvMDcvMjAxNjA5MTgwNzA0MjQ0NDJjMzU2OGJmMV9mN2Q2YjNhOC5tcDQ=</hd4>
       <hd3>aHR0cDovL3ZvZHBjLWFsLndhc3UuY24vcGNzYW4xMi9tYW1zL3ZvZC8yMDE2MTAvMjcvMTcvMjAxNjEwMjcxNzIzMTY1MTEzODRlNzliNy5tcDQ=</hd3>
       <hd2>aHR0cDovL3ZvZHBjLWFsLndhc3UuY24vcGNzYW4xMi9tYW1zL3ZvZC8yMDE2MTAvMjcvMTcvMjAxNjEwMjcxNzIwMDUzNDFjNDI4ZWRhOS5tcDQ=</hd2>
       <hd0>aHR0cDovL3ZvZHBjLWFsLndhc3UuY24vcGNzYW4xMi9tYW1zL3ZvZC8yMDE2MTAvMjcvMTcvMjAxNjEwMjcxNzI1NTk5ODhlOGZlMmFlZi5tcDQ=</hd0>
</mp4>

hd0~hd4為視頻的清晰度,每個加密的字符串是什么含義荧缘,目前我們還無法得出皆警。

獲取視頻地址

接下來看看獲取視頻地址的接口是如何構(gòu)造的。

觀察接口地址 http://apiontime.wasu.cn/Auth/getVideoUrl?id=7882670&key=11ac882a1f434800cf661ae5dbd81ca4&url=aHR0cDovL3ZvZHBjLWFsLndhc3UuY24vcGNzYW4xMi9tYW1zL3ZvZC8yMDE2MTAvMjcvMTcvMjAxNjEwMjcxNzE5MTYwOTQ5NzQ1NmQxNi5tcDQ= 發(fā)現(xiàn):

  1. 參數(shù)id為視頻ID
  2. 參數(shù)key尚不知道從哪里來
  3. 參數(shù)url就是第1個接口返回信息中某個清晰度對應(yīng)的加密字符串

現(xiàn)在的問題是參數(shù)key從哪里得到截粗。實際上信姓,我們可以在播放頁源碼中找到key

_playKey = '11ac882a1f434800cf661ae5dbd81ca4'

OK鸵隧,第2個接口的參數(shù)搞定了。我們看看這個接口返回的數(shù)據(jù)是什么樣的:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <id></id>
    <title></title>
    <video>
        <![CDATA[8ec7ZEZEWDowIRsyTmMjGXQKUiQYai5SPn8VCUZ+ciYNEDdrejlBEQMud3EBJG8Caz5mOylbWFcTXhQOZCUJbi5Ybj9kSy1BHkgdHCkzRRMYMwomAVQAW0UyXFlzdFF0UxBPB0gbCRZTUhYrfi9fNgYgTypyCGhvFn0VXB40IWdla0dPdwEreFUlL2J+CUwhVRR9GQhQbT1cWX0lN0p4CDdoODEwO2sDTFx2AT1qJzJkHl0POlsjfRkSEGsQMDE0D3smYU1fVw==]]>
    </video>
    <page></page>
</root>

是個XML格式內(nèi)容意推,video標(biāo)簽包含的應(yīng)該就是視頻的地址豆瘫,只不過是個加密后的地址,就看如何解密了菊值。

在瀏覽器開發(fā)者工具中外驱,可以看到第2個請求是Flash播放器發(fā)出的。很有可能Flash播放器中對加密視頻地址作了解密腻窒。經(jīng)過反編譯華數(shù)TV的Flash播放器文件WsPlayer.swf昵宇,找到了相關(guān)解密方法,翻譯成Python語言如下:

def url_decode(param1):
    # md5_hex是用來計算md5哈希值的
    param2 = md5_hex('wasu!@#48217#$@#1')
    loc7 = md5_hex(param2[0:16])
    loc8 = md5_hex(param2[16:32])
    loc11 = loc7 + md5_hex(loc7 + param1[0:4])
    loc12  = len(loc11)
    param1 = base64.b64decode(param1[4:])
    loc13 = len(param1)

    loc14 = []
    loc15 = []
    loc16 = 0
    while loc16 < 128:
        loc14.append(loc16)
        loc15.append(ord(loc11[loc16 % loc12]) & 255)
        loc16 += 1

    loc16 = 0
    loc17 = 0
    loc19 = 0
    while loc16 < 128:
        loc17 = (loc17 + loc14[loc16] + loc15[loc16]) % 128
        loc19 = loc14[loc16]
        loc14[loc16] = loc14[loc17]
        loc14[loc17] = loc19
        loc16 += 1

    loc17 = 0
    loc16 = 0
    loc18 = 0
    loc20 = []
    while loc16 < loc13:
        loc18 = (loc18 + 1) % 128
        loc17 = (loc17 + loc14[loc18]) % 128
        loc19 = loc14[loc18]
        loc14[loc18] = loc14[loc17]
        loc14[loc17] = loc19
        t = ord(param1[loc16]) & 255 ^ loc14[(loc14[loc18] + loc14[loc17]) % 128]
        loc20.append(chr(ord(param1[loc16]) & 255 ^ loc14[(loc14[loc18] + loc14[loc17]) % 128]))
        loc16 += 1

    return (''.join(loc20))[26:]

至此儿子,大功告成瓦哎。

Python代碼示例

import re
import requests
import base64
import hashlib
from pyquery import PyQuery as pq

def md5_hex(data):
    m = hashlib.md5()
    m.update(data)
    return m.hexdigest()

url = 'http://www.wasu.cn/Play/show/id/7882670'
# get vid
vid = re.search('/id/(\d+)', url).group(1)
# get key
r = requests.get(url)
key = re.search('_playKey\s*=\s*\'(\w+)\'', r.content).group(1)

r = requests.get('http://www.wasu.cn/Api/getPlayInfoById/id/%s/datatype/xml' % vid)
d = pq(r.content)
for definition in ('hd3', 'hd2', 'hd1', 'hd0'):
    element = d('mp4')(definition)
    r = requests.get('http://apiontime.wasu.cn/Auth/getVideoUrl?id=%s&key=%s&url=%s' % (vid, key, element.text()))
    tmp_d = pq(r.content)
    encoded_url = tmp_d('video').text()
    print definition, url_decode(encoded_url)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市柔逼,隨后出現(xiàn)的幾起案子蒋譬,更是在濱河造成了極大的恐慌,老刑警劉巖愉适,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犯助,死亡現(xiàn)場離奇詭異,居然都是意外死亡儡毕,警方通過查閱死者的電腦和手機(jī)也切,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腰湾,“玉大人雷恃,你說我怎么就攤上這事》逊唬” “怎么了倒槐?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長附井。 經(jīng)常有香客問我讨越,道長,這世上最難降的妖魔是什么永毅? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任把跨,我火速辦了婚禮,結(jié)果婚禮上沼死,老公的妹妹穿的比我還像新娘着逐。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布耸别。 她就那樣靜靜地躺著健芭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秀姐。 梳的紋絲不亂的頭發(fā)上慈迈,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音省有,去河邊找鬼痒留。 笑死,一個胖子當(dāng)著我的面吹牛锥咸,可吹牛的內(nèi)容都是我干的狭瞎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼搏予,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弧轧?” 一聲冷哼從身側(cè)響起雪侥,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎精绎,沒想到半個月后速缨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡代乃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年旬牲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搁吓。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡原茅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堕仔,到底是詐尸還是另有隱情擂橘,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布摩骨,位于F島的核電站通贞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恼五。R本人自食惡果不足惜昌罩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灾馒。 院中可真熱鬧茎用,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夯辖,卻和暖如春琉预,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒿褂。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工圆米, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啄栓。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓娄帖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昙楚。 傳聞我的和親對象是個殘疾皇子近速,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)堪旧,斷路器削葱,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,992評論 6 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,185評論 25 707
  • 你給我的一切,都是我放縱的脾氣 我后悔的失去你 我所有的脾氣都來自于生活的壓抑 每天干什么淳梦,不干什么都是我的軌跡 ...
    導(dǎo)演張升志閱讀 142評論 0 0
  • 心靈深處的東西爆袍,總是不安的首繁。當(dāng)心沉淀為一種思想時,思想的內(nèi)涵把心牢牢的捆自赡摇弦疮;當(dāng)心孕育宇宙,心承載著所有心谆扎,才能真正...
    悟吧一昧原創(chuàng)閱讀 223評論 0 0