愛奇藝vf算法播放直連解析

本文介紹如何獲取愛奇藝手機(jī)版http://m.iqiyi.com/中視頻的播放源鏈接

前言

想編寫一個(gè) 可以獲取愛奇藝直播源的解析工具,遇到如下問題并抓包記錄下來

問題

尋找解析接口愛奇藝播放鏈接直連源

XXX平臺(tái)接口百度搜索一下vip接口很多硼端,

解析接口:XXX平臺(tái)/?url=http://m.iqiyi.com/v_19rqpl2i8w.html


電腦版:User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36

分析抓包

通過瀏覽器抓包分析,F(xiàn)12 纵刘,首先訪問XXX平臺(tái)/player.php?url= GET方式提交后介劫,得到api.php 的7個(gè)參數(shù)如下,url回怜,referer店量,ref芜果,time,md5融师,type右钾,key,然后在通過post 方式提交這五個(gè)參數(shù)即可得到播放源的解析參數(shù),post 提交地址?XXX平臺(tái)/api.php

XXX平臺(tái) /player.php?url= GET方式提交后得到如下內(nèi)容


把上面7個(gè)參數(shù) 組合 post 方式 提交 XXX平臺(tái) /api.php 得到直連解析參數(shù)

Request URL: XXX平臺(tái)/api.phpurl=http%3A%2F%2Fm.iqiyi.com%2Fv_19rqpl2i8w.html&referer=aHR0cDovL2p4Lml0YW9qdS50b3AvP3VybD1odHRwOi8vbS5pcWl5aS5jb20vdl8xOXJxcGwyaTh3Lmh0bWw%3D&ref=0&time=1547937959&md5=2acbc4c7a5a0911db0d40328a5e918d7&type=&key=U6m7yVJvtLgXZpFimrdLL17fTn_j%2FG7aJ_yV_IJvJGQqxbJZ

{

? ? "code": "200",

? ? "url": "\/jp\/dash?tvid=1745487500&vid=785c82b2b8949a49c6be38876fede723&bid=300&abid=300&src=02020031010000000000&uid=&ut=1&ori=h5&ps=0&messageId=dash_9b0f71b7c544b76d7b2d2b0341158ce0&ost=0&preIdAll=&locale=zh_cn&dfp=&k_tag=1&k_ft1=18141941858304&k_err_retries=3&k_uid=6466b50c2a41c9e46a950a6436880dca&pt=0&lid=&cf=&ct=&qd_v=1&qdy=a&qds=0&tm=1547937960000&callback=Z1547937960000",

? ? "type": "iqiyi",

? ? "play": "ajax"

}




把直連解析參數(shù)組合GTE方式提交到 http://cache.video.iqiyi.com/jp/dash 會(huì)得到我們需要的直連視頻地址

http://cache.video.iqiyi.com/jp/dash?tvid=1745487500&vid=785c82b2b8949a49c6be38876fede723&bid=300&abid=300&src=02020031010000000000&uid=&ut=1&ori=h5&ps=0&messageId=dash_9b0f71b7c544b76d7b2d2b0341158ce0&ost=0&preIdAll=&locale=zh_cn&dfp=&k_tag=1&k_ft1=18141941858304&k_err_retries=3&k_uid=6466b50c2a41c9e46a950a6436880dca&pt=0&lid=&cf=&ct=&qd_v=1&qdy=a&qds=0&tm=1547937960000&vf=82973155af32b6ed1efd4dfc5e33833c&callback=Z1547937960000




try {

? ? Z1547937960000({

? ? ? ? "code": "A00000",

? ? ? ? "data": {

? ? ? ? ? ? "dm3u8": "http:\/\/cache.m.iqiyi.com\/dc\/dt\/",

? ? ? ? ? ? "st": 101,

? ? ? ? ? ? "dstl": "http:\/\/meta.video.iqiyi.com",

? ? ? ? ? ? "ctl": {

? ? ? ? ? ? ? ? "uip": "39.177.55.180",

? ? ? ? ? ? ? ? "vf": "82973155af32b6ed1efd4dfc5e33833c",

? ? ? ? ? ? ? ? "cached": true,

? ? ? ? ? ? ? ? "bid": 300,

? ? ? ? ? ? ? ? "uid": "",

? ? ? ? ? ? ? ? "ut": [1],

? ? ? ? ? ? ? ? "qd_vipdyn": 0,

? ? ? ? ? ? ? ? "num": "148"

? ? ? ? ? ? },

? ? ? ? ? ? "aid": 216266201,

? ? ? ? ? ? "dm": "http:\/\/meta.video.iqiyi.com",

? ? ? ? ? ? "drm": "http:\/\/drm.video.iqiyi.com\/drm\/",

? ? ? ? ? ? "parts": {},

? ? ? ? ? ? "bmsg": {

? ? ? ? ? ? ? ? "t": "20190120064402",

? ? ? ? ? ? ? ? "f": "web",

? ? ? ? ? ? ? ? "mid": "",

? ? ? ? ? ? ? ? "sp": "9051021601"

? ? ? ? ? ? },

? ? ? ? ? ? "svp": [],

? ? ? ? ? ? "cid": 2,

? ? ? ? ? ? "content": {

? ? ? ? ? ? ? ? "vipTypes": [0],

? ? ? ? ? ? ? ? "thdt": 1,

? ? ? ? ? ? ? ? "hdcp": 0,

? ? ? ? ? ? ? ? "isRs": 0,

? ? ? ? ? ? ? ? "exclusive": 0,

? ? ? ? ? ? ? ? "bossStatus": 0,

? ? ? ? ? ? ? ? "isProduced": 0

? ? ? ? ? ? },

? ? ? ? ? ? "dd": "http:\/\/data.video.iqiyi.com\/videos",

? ? ? ? ? ? "tvid": 1745487500,

? ? ? ? ? ? "program": {

? ? ? ? ? ? ? ? "audio": [],

? ? ? ? ? ? ? ? "video": [{

? ? ? ? ? ? ? ? ? ? "drmType": 1,

? ? ? ? ? ? ? ? ? ? "isdol": 0,

? ? ? ? ? ? ? ? ? ? "ff": "mp4",

? ? ? ? ? ? ? ? ? ? "mu": "",

? ? ? ? ? ? ? ? ? ? "dr": -1,

? ? ? ? ? ? ? ? ? ? "vid": "b2bae5e7a9f6cd54d831a1d772410827",

? ? ? ? ? ? ? ? ? ? "isPreview": 0,

? ? ? ? ? ? ? ? ? ? "ispre": 1,

? ? ? ? ? ? ? ? ? ? "lgt": 0,

? ? ? ? ? ? ? ? ? ? "code": 2,

? ? ? ? ? ? ? ? ? ? "lid": 1,

? ? ? ? ? ? ? ? ? ? "ists": 0,

? ? ? ? ? ? ? ? ? ? "bid": 200,

? ? ? ? ? ? ? ? ? ? "_selected": false,

? ? ? ? ? ? ? ? ? ? "m3u8Url": "",

? ? ? ? ? ? ? ? ? ? "duration": 2754,

? ? ? ? ? ? ? ? ? ? "vsize": 81759320,

? ? ? ? ? ? ? ? ? ? "name": "國(guó)語",

? ? ? ? ? ? ? ? ? ? "rp": 2

? ? ? ? ? ? ? ? }, {

? ? ? ? ? ? ? ? ? ? "drmType": 1,

? ? ? ? ? ? ? ? ? ? "isdol": 0,

? ? ? ? ? ? ? ? ? ? "ff": "mp4",

? ? ? ? ? ? ? ? ? ? "mu": "",

? ? ? ? ? ? ? ? ? ? "mp4Url": "http:\/\/data.video.iqiyi.com\/videos\/v0\/20190108\/56\/42\/ff3c988aa04e0aeb55d2dd0368be8521.mp4?m=v&qd_uri=dash&qd_sc=89a6fa342f6eca907c8f501274a0bc4c&pv=0.2&qd_tm=1547937960000&qd_p=27b137b4&qdv=1&dfp=&ssl=0&qd_vip=0&qd_src=02020031010000000000&dis_src=vrs&qd_uid=&qd_k=82973155af32b6ed1efd4dfc5e33833c&qd_ip=27b137b4",

? ? ? ? ? ? ? ? ? ? "duration": 2754,

? ? ? ? ? ? ? ? ? ? "dr": -1,

? ? ? ? ? ? ? ? ? ? "vid": "4cf0ec53a7e8c620202a35f6c06bbb85",

? ? ? ? ? ? ? ? ? ? "isPreview": 0,

? ? ? ? ? ? ? ? ? ? "ispre": 1,

? ? ? ? ? ? ? ? ? ? "unencryptedDuration": 0,

? ? ? ? ? ? ? ? ? ? "lgt": 0,

? ? ? ? ? ? ? ? ? ? "code": 2,

? ? ? ? ? ? ? ? ? ? "lid": 1,

? ? ? ? ? ? ? ? ? ? "fs": [],

? ? ? ? ? ? ? ? ? ? "scrsz": "640x360",

? ? ? ? ? ? ? ? ? ? "tag": {

? ? ? ? ? ? ? ? ? ? ? ? "vt": "",

? ? ? ? ? ? ? ? ? ? ? ? "at": ""

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? "p2p": "",

? ? ? ? ? ? ? ? ? ? "ists": 0,

? ? ? ? ? ? ? ? ? ? "bid": 300,

? ? ? ? ? ? ? ? ? ? "_selected": true,

? ? ? ? ? ? ? ? ? ? "ps": 0,

? ? ? ? ? ? ? ? ? ? "rp": 2,

? ? ? ? ? ? ? ? ? ? "vsize": 122022919,

? ? ? ? ? ? ? ? ? ? "name": "國(guó)語",

? ? ? ? ? ? ? ? ? ? "m3u8Url": ""

? ? ? ? ? ? ? ? }],

? ? ? ? ? ? ? ? "stl": []

? ? ? ? ? ? },

? ? ? ? ? ? "p": {

? ? ? ? ? ? ? ? "lgh": [],

? ? ? ? ? ? ? ? "lgp": 0,

? ? ? ? ? ? ? ? "wmarkPos": 0,

? ? ? ? ? ? ? ? "bt": -1,

? ? ? ? ? ? ? ? "raudio": false,

? ? ? ? ? ? ? ? "et": -1,

? ? ? ? ? ? ? ? "pano": {

? ? ? ? ? ? ? ? ? ? "type": 1

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? "ca": 0,

? ? ? ? ? ? ? ? "tsl": [{

? ? ? ? ? ? ? ? ? ? "stm": 969,

? ? ? ? ? ? ? ? ? ? "etm": 0

? ? ? ? ? ? ? ? }, {

? ? ? ? ? ? ? ? ? ? "stm": 1875,

? ? ? ? ? ? ? ? ? ? "etm": 0

? ? ? ? ? ? ? ? }]

? ? ? ? ? ? }

? ? ? ? }

? ? });

} catch (e) {}

;

獲取到的播放直連地址如下

"mp4Url": "http://data.video.iqiyi.com/videos/v0/20190108/56/42/ff3c988aa04e0aeb55d2dd0368be8521.mp4?m=v&qd_uri=dash&qd_sc=89a6fa342f6eca907c8f501274a0bc4c&pv=0.2&qd_tm=1547937960000&qd_p=27b137b4&qdv=1&dfp=&ssl=0&qd_vip=0&qd_src=02020031010000000000&dis_src=vrs&qd_uid=&qd_k=82973155af32b6ed1efd4dfc5e33833c&qd_ip=27b137b4",

vf 算法 本文引用了舀射,某大佬窘茁,納豆app視頻播放鏈解析教程,下面將原文貼在下面提供大家學(xué)習(xí)脆烟。

分析測(cè)試前期抓包山林。請(qǐng)求網(wǎng)站:http://m.toutiao.iqiyi.com/top_126hd0mujy.html

在app端抓包,兩次的不同的請(qǐng)求:

http://cache.m.iqiyi.com/jp/tmts/961149300/961149300/?uid=&cupid=&platForm=h5&qyid=&agenttype=13&type=mp4&rate=1&k_ft1=8&qdv=1&qdx=n&qdy=x&qds=0&__jsT=sgve&t=1521166692860&src=02020031010000000000&vf=0b53f9287e1b0a970ed1343392af05c2&callback=tmtsCallback

http://cache.m.iqiyi.com/jp/tmts/961149300/961149300/?uid=&cupid=&platForm=h5&qyid=&agenttype=13&type=mp4&rate=1&k_ft1=8&qdv=1&qdx=n&qdy=x&qds=0&__jsT=sgve&t=1521105711069&src=02020031010000000000&vf=1461673fa3ce9cc1cdef6308c9691171&callback=tmtsCallback

觀察其中的參數(shù)邢羔,只有t和vf不同驼抹,這個(gè)t很明顯能看出來是一個(gè)時(shí)間戳(13位的),而這個(gè)vf就得繼續(xù)研究了

找尋加密方法

猜想是不是由某個(gè)js文件加密生成的

于是我按下f12拜鹤,刷新了下頁面砂蔽,發(fā)現(xiàn)在這個(gè)播放鏈出來之前加載了如下幾個(gè)js文件



注:最下面的那個(gè)請(qǐng)求是獲取詳細(xì)播放鏈的url

在圖中的js文件中,很輕易便能看到有一個(gè)特別顯眼的js文件:app_detail_video.18f1b586.js

http://static.qiyi.com/assets/js/page/detail/app_detail_video.18f1b586.js

我們進(jìn)入到以上的js文件中署惯,檢索 vf= 這個(gè)關(guān)鍵詞,找到相關(guān)的代碼如下

function(e, t, a) {

? ? var i = window.cmd5xtmts ? window.cmd5xtmts() : {};

? ? $.extend(a || {}, i, {

? ? ? ? src: "02020031010000000000"

? ? });

? ? var n = "/jp/tmts/" + e + "/" + t + "/?" + $.param(a) + "&callback=tmtsCallback";

? ? return a.vf = window.cmd5x ? window.cmd5x(n) : "", a

}(e, t, a));

這里的 a.vf = window.cmd5x ? window.cmd5x(n) : “”, a

意思是:若window這個(gè)對(duì)象有cmd5x這個(gè)方法(屬性)镣隶,就返回window.cmd5x(n)极谊;否則返回””空字符串, 后面的a是第二個(gè)返回值

到這里就出現(xiàn)兩個(gè)問題:

1.cmd5x這個(gè)函數(shù)在哪兒?

2.這個(gè)n是怎么得到的?

找尋cmd5x這個(gè)加密函數(shù)

在所有加載的js文件中都找了一遍安岂,但是還沒有明確地看到cmd5x這個(gè)function轻猖,但是在網(wǎng)上查到的一份有關(guān)愛奇藝的vf算法js文件看到如下一段代碼

o.exports = {

? ? request: function(e, t, i) {

? ? ? ? var o = navigator.userAgent.match(/miuivideo\//i) || n.os.android && parseInt(n.os.version) > 4 && navigator.userAgent.match(/MiuiBrowser/i);

? ? ? ? u.sendVrsRequestPingback(),

? ? ? ? r.jsonp({

? ? ? ? ? ? url: c.h5tmtsUrl + e.tvid + "/" + e.vid + "/",

? ? ? ? ? ? params: function() {

? ? ? ? ? ? ? ? var t = {

? ? ? ? ? ? ? ? ? ? platForm: "h5",

? ? ? ? ? ? ? ? ? ? uid: d.getUid(),

? ? ? ? ? ? ? ? ? ? dfp: s.get(),

? ? ? ? ? ? ? ? ? ? cupid: e.cupid,

? ? ? ? ? ? ? ? ? ? src: p.getSrc(),

? ? ? ? ? ? ? ? ? ? codeflag: 1,

? ? ? ? ? ? ? ? ? ? type: n.os.mac && n.browser.SAFARI || n.browser.iPad || n.browser.iPhone || n.os.android && parseFloat(n.os.version) > 4 || o ? "m3u8": "mp4"

? ? ? ? ? ? ? ? };

? ? ? ? ? ? ? ? f.isBoss() && (t.nolimit = 1);

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? l(t, p.cmd5xtmts())

? ? ? ? ? ? ? ? } catch(e) {}

? ? ? ? ? ? ? ? return t

? ? ? ? ? ? } (),

? ? ? ? ? ? beforeSend: function(e) {

? ? ? ? ? ? ? ? var t = a.parse(e.url).host;

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? p.cmd5x && (e.url += "&vf=" + p.cmd5x(e.url.replace(new RegExp("^https?://" + t, "ig"), "")))

? ? ? ? ? ? ? ? } catch(e) {}

? ? ? ? ? ? ? ? return e

? ? ? ? ? ? },

? ? ? ? ? ? success: function(e) {

? ? ? ? ? ? ? ? u.sendVrsReadyPingback(),

? ? ? ? ? ? ? ? e && e.hasOwnProperty("code") ? "A00000" === e.code ? t(e) : i(e) : i({

? ? ? ? ? ? ? ? ? ? code: "P00001"

? ? ? ? ? ? ? ? })

? ? ? ? ? ? },

? ? ? ? ? ? failure: function() {

? ? ? ? ? ? ? ? i({

? ? ? ? ? ? ? ? ? ? code: "P00001"

? ? ? ? ? ? ? ? })

? ? ? ? ? ? }

? ? ? ? })

? ? }

}

能看出來以上是部分關(guān)于發(fā)送驗(yàn)證請(qǐng)求的代碼,主要看beforeSend這一部分域那,大概能夠知道

url: c.h5tmtsUrl + e.tvid + "/" + e.vid + "/",

var t = a.parse(e.url).host;

e.url += "&vf=" + p.cmd5x(e.url.replace(new RegExp("^https?://" + t, "ig"), ""))

以上咙边,我們還找到h5tmtsUrl這個(gè)未知的變量,又找到如下的代碼

注:e.url.replace(new RegExp(“^https?://“ + t, “ig”), “”)

這是將”https://“+e.url的域名 , “ig”表示不區(qū)分大小寫次员,統(tǒng)統(tǒng)替換成成空字符串败许,結(jié)合下面提到的來說,也就是將”https://cache.m.iqiyi.com/jp/tmts/" 這一段字符替換成空字符串

function(e, t, i) {

? ? var o;

? ? void 0 !== (o = function(e, t, i) {

? ? ? ? var o = window.location.protocol;

? ? ? ? i.exports = {

? ? ? ? ? ? vipauthUrl: "https://api.vip.iqiyi.com/services/cknsp.action",

? ? ? ? ? ? h5tmtsUrl: o + "http://cache.m.iqiyi.com/jp/tmts/",

? ? ? ? ? ? vmsUrl: o + "http://cache.video.iqiyi.com/jp/vms",

? ? ? ? ? ? vmsIPUrl1: "http://115.182.125.142/jp/vms",

? ? ? ? ? ? vmsIPUrl2: "http://124.250.53.164/jp/vms",

? ? ? ? ? ? pingbackUrl: "http://msg.71.am/core",

? ? ? ? ? ? isfanUrl: o + "http://sns-api.iqiyi.com/apis/friend/follow.action"

? ? ? ? }

? ? }.call(t, i, t, e)) && (e.exports = o)

}

可以知道

var o = window.location.protocol;

h5tmtsUrl: o + "http://cache.m.iqiyi.com/jp/tmts/"

h5tmtsUrl其實(shí)就是一個(gè)通信協(xié)議+指定字符串:”https” + “//cache.m.iqiyi.com/jp/tmts/“

所以淑蔚,到這里我們需要解決的是什么呢市殷?cmd5x這個(gè)函數(shù)我們依然不知道,且我們只能大概知道作為其參數(shù)的e.url是一個(gè)被替換掉了”https://cache.m.iqiyi.com/jp/tmts/" 的正常url字符串刹衫,其可能的參數(shù)有如下

url = c.h5tmtsUrl + e.tvid + "/" + e.vid + "/"

#以下這些拼接成字符串

{

? ? platForm: "h5",

? ? uid: d.getUid(),

? ? dfp: s.get(),

? ? cupid: e.cupid,

? ? src: p.getSrc(),

? ? codeflag: 1,

? ? type: n.os.mac && n.browser.SAFARI || n.browser.iPad || n.browser.iPhone || n.os.android && parseFloat(n.os.version) > 4 || o ? "m3u8": "mp4"

};

由于其js文件實(shí)在太混亂醋寝,所有參數(shù)都不知道怎么來的,沒法推算出我們應(yīng)該給這個(gè)cmd5x傳一個(gè)什么樣的值带迟,更重要的是js中的cmd5x在哪兒音羞,我該怎么用py去調(diào)用都不知道。最后還是在萬能的google上扎到了答案仓犬,感謝貢獻(xiàn)代碼的大佬嗅绰,一路帶我前行

來自大佬的微笑

參考了幾篇博客,自己也嘗試著構(gòu)造請(qǐng)求,也成功了办陷,大概有以下這些參數(shù)是必要的

head = "/jp/tmts/tvid/vid/?"

param = {

? ? ? ? "uid":"",

? ? ? ? "cupid":"",

? ? ? ? "platForm":"h5",

? ? ? ? "qyid":"",

? ? ? ? "agenttype":"13",

? ? ? ? "type":"mp4",

? ? ? ? "nolimit":"",

? ? ? ? "k_ft1":"8",

? ? ? ? "rate":"2",

? ? ? ? "sgti":"",

? ? ? ? "qdv":"1",

? ? ? ? "qdx":"n",

? ? ? ? "qdy":"x",

? ? ? ? "qds":"0",

? ? ? ? "__jsT":"sgve",

? ? ? ? "t":t,

? ? ? ? "src":"02020031010000000000",

? ? ? ? "callback":"tmtsCallback"

? ? }

將param構(gòu)造成一個(gè)字符串貌夕,再在頭部拼接上head即是一個(gè)正常的cmd5x需要的參數(shù),一個(gè)正常的出參數(shù)值為:

/jp/tmts/12476488409/12476488409/?src=02020031010000000000&callback=tmtsCallback&uid=&sgti=13_12e9e055c713deba092399c62d8cb2b2_1489561211612&agenttype=13&cupid=&t=1521388096000&qdv=1&platForm=h5&rate=2&__jsT=sgve&k_ft1=8&qds=0&nolimit=&qdy=x&type=mp4&qdx=n&qyid=&&vf=39f7f4c1b39089dbfe887ad15f1ffb7a

加上對(duì)應(yīng)的頭部文件:

“http://cache.m.iqiyi.com"

最后即是我們請(qǐng)求視頻鏈接的地址

http://cache.m.iqiyi.com/jp/tmts/12476488409/12476488409/?src=02020031010000000000&callback=tmtsCallback&uid=&sgti=13_12e9e055c713deba092399c62d8cb2b2_1489561211612&agenttype=13&cupid=&t=1521388096000&qdv=1&platForm=h5&rate=2&__jsT=sgve&k_ft1=8&qds=0&nolimit=&qdy=x&type=mp4&qdx=n&qyid=&&vf=39f7f4c1b39089dbfe887ad15f1ffb7a

其返回的數(shù)據(jù)格式化后如下:

{

  "timestamp":"20180318234822",

  "ctl":{

    "area":1

  },

  "code":"A00000",

  "data":{

    "vipTypes":[

    ],

    "screenSize":"854x480",

    "vidl":[

      {

        "vd":1,

        "screenSize":"854x480",

        "vid":"e7eb1b37eeb029f6529bde6dc66a4815"

      }

    ],

    "aid":"",

    "pano":{

      "rType":0,

      "type":1

    },

    "adDuration":0,

    "messageId":"",

    "head":0,

    "previewType":"",

    "ugc":1,

    "clientIp":"114.248.64.91",

    "prv":"",

    "vd":1,

    "vid":"12476488409",

    "rTime":"",

    "ds":"A00012",

    "lgh":[

    ],

    "duration":272,

    "wmarkPos":0,

    "bossStatus":0,

    "cacheTime":1521388047491,

    "tail":0,

    "isProduced":0,

    "cid":5,

    "tipType":"",

    "m3u":"http://222.134.2.36/videos/v1/20180210/59/d2/82ae8f5cf70d7093c1b4dbcfbe667e6b.mp4?key=09bf99dfe8d1239f4fd1deb1192c91f75&dis_k=244569a7f99feb6f8fde7414223cfb756&dis_t=1521388102&dis_dz=CNC-BeiJing&dis_st=40&src=iqiyi.com&uuid=a6e5338-5aae8a46-e&m=v&qd_k=39f7f4c1b39089dbfe887ad15f1ffb7a&sgti=13_12e9e055c713deba092399c62d8cb2b2_1489561211612&qd_ip=72f8405b&qd_p=72f8405b&dfp=&qd_src=02020031010000000000&ssl=&ip=114.248.64.91&qd_vip=0&dis_src=vrs&qd_uid=0&qdv=1&qd_tm=1521388102146",

    "ad":1,

    "exclusive":0,

    "tvid":12476488409,

    "previewTime":"",

    "m3utx":"http://222.134.2.36/videos/v1/20180210/59/d2/82ae8f5cf70d7093c1b4dbcfbe667e6b.mp4?key=09bf99dfe8d1239f4fd1deb1192c91f75&dis_k=244569a7f99feb6f8fde7414223cfb756&dis_t=1521388102&dis_dz=CNC-BeiJing&dis_st=40&src=iqiyi.com&uuid=a6e5338-5aae8a46-e&m=v&qd_k=39f7f4c1b39089dbfe887ad15f1ffb7a&sgti=13_12e9e055c713deba092399c62d8cb2b2_1489561211612&qd_ip=72f8405b&qd_p=72f8405b&dfp=&qd_src=02020031010000000000&ssl=&ip=114.248.64.91&qd_vip=0&dis_src=vrs&qd_uid=0&qdv=1&qd_tm=1521388102146"

  }

}

其中的m3u就是視頻真正的播放地址了

cmd5x也有破解好的對(duì)應(yīng)幾個(gè)版本民镜,其實(shí)也叫做vf的算法啡专,針對(duì)不同類型

import hashlib

#app端的vf算法

def cmd5x(str):

? ? vf = hashlib.new('md5', str + '3sj8xof48xof4tk9f4tk9ypgk9ypg5ul').hexdigest()

? ? return vf

#pc端的vf算法,針對(duì)愛奇藝的網(wǎng)頁播放

def getPcVf(str):

? ? vf = hashlib.new('md5', str + 'u6fnp3eok0dpftcq9qbr4n9svk8tqh7u').hexdigest()

? ? return vf

#針對(duì)vip用戶的vf算法

def getPcIbt(str):

? ? vf = hashlib.new('md5', str + 't6hrq6k0n6n6k6qdh6tje6wpb62v7654').hexdigest()

? ? return vf

這里我們使用第一個(gè)即可

代碼

代碼放在github了制圈,有需要的可以看看

2018/07/12更新

看了下日志们童,愛奇藝大概是從6月27號(hào)更新了策略。不知道是不是被抓的多了….

以上app端的加鹽md5算法失效了鲸鹦,花了點(diǎn)時(shí)間找到了cmd5x更新后的方法慧库,說下思路:其關(guān)鍵函數(shù)藏在一個(gè)js文件中,參數(shù)也更新了馋嗜,并且還需要注意某一個(gè)參數(shù)的先后順序.

注:我沒有使用新的cmd5x方法去加密原始的參數(shù)齐板,所以不知道原始的參數(shù)是不是能使用。最好還是都替換成新的吧葛菇,因?yàn)閍pp_detail_video.xxxx.js文件也換了新的

由于怕被封甘磨,暫時(shí)先不把方法寫到這里,還是那句話眯停,接口且用且珍惜.

發(fā)現(xiàn)更多好玩的樂趣济舆,百度一下 【 軟件隊(duì)長(zhǎng) 】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市莺债,隨后出現(xiàn)的幾起案子滋觉,更是在濱河造成了極大的恐慌,老刑警劉巖齐邦,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椎侠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡侄旬,警方通過查閱死者的電腦和手機(jī)肺蔚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儡羔,“玉大人宣羊,你說我怎么就攤上這事√” “怎么了仇冯?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)族操。 經(jīng)常有香客問我苛坚,道長(zhǎng)比被,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任泼舱,我火速辦了婚禮等缀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娇昙。我一直安慰自己尺迂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布冒掌。 她就那樣靜靜地躺著噪裕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪股毫。 梳的紋絲不亂的頭發(fā)上膳音,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音铃诬,去河邊找鬼祭陷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趣席,可吹牛的內(nèi)容都是我干的颗胡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吩坝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了哑蔫?” 一聲冷哼從身側(cè)響起钉寝,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闸迷,沒想到半個(gè)月后嵌纲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腥沽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年逮走,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片今阳。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡师溅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盾舌,到底是詐尸還是另有隱情墓臭,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布妖谴,位于F島的核電站窿锉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗡载,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一窑多、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洼滚,春花似錦埂息、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挪哄,卻和暖如春吧秕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迹炼。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工砸彬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斯入。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓砂碉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親刻两。 傳聞我的和親對(duì)象是個(gè)殘疾皇子增蹭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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