JS實(shí)現(xiàn)百度網(wǎng)盤(pán)任意文件強(qiáng)制下載功能
代碼:
//get file list data var data=require("system-core:context/context.js").instanceForSystem.getList().listView.listsData; //calculate sign function base64Encode(r){var t,e,a,c,n,o,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(a=r.length,e=0,t="";a>e;){if(c=255&r.charCodeAt(e++),e==a){t+=h.charAt(c>>2),t+=h.charAt((3&c)<<4),t+="==";break}if(n=r.charCodeAt(e++),e==a){t+=h.charAt(c>>2),t+=h.charAt((3&c)<<4|(240&n)>>4),t+=h.charAt((15&n)<<2),t+="=";break}o=r.charCodeAt(e++),t+=h.charAt(c>>2),t+=h.charAt((3&c)<<4|(240&n)>>4),t+=h.charAt((15&n)<<2|(192&o)>>6),t+=h.charAt(63&o)}return t} function u(j,r){var a=[];var p=[];var o="";var v=j.length;for(var q=0;q<256;q++){a[q]=j.substr((q%v),1).charCodeAt(0);p[q]=q}for(var u=q=0;q<256;q++){u=(u+p[q]+a[q])%256;var t=p[q];p[q]=p[u];p[u]=t}for(var i=u=q=0;q<r.length;q++){i=(i+1)%256;u=(u+p[i])%256;var t=p[i];p[i]=p[u];p[u]=t;k=p[((p[i]+p[u])%256)];o+=String.fromCharCode(r.charCodeAt(q)^k)}return o} var sign=base64Encode(u(yunData.sign5, yunData.sign1)).replace(/=/g,"%3D").replace(/\+/g,"%2B"); //downloader function down(index){$.ajax({type:"GET",url:"/api/download?sign="+sign+"×tamp="+yunData.timestamp+"&fidlist=%5B"+data[1].fs_id+"%5D",success:function(d){console.warn(d.dlink [index-1].dlink);}});}
用法:
1.進(jìn)入網(wǎng)盤(pán)文件目錄。
2.F12打開(kāi)調(diào)試工具將代碼粘貼到控制臺(tái)并回車(chē)。
3.在控制臺(tái)輸入down(文件序號(hào))命令,回車(chē)即可得到文件的下載地址,可復(fù)制到任何下載工具滿速下載。
“文件序號(hào)”對(duì)應(yīng)文件目錄列表,下載第一個(gè)文件就輸入down(1),第二個(gè)文件就輸入down(2),依此類(lèi)推。注意括號(hào)是英文括號(hào)。
原理:
下載鏈接獲取接口:
通過(guò)監(jiān)聽(tīng)與其服務(wù)器交互的請(qǐng)求數(shù)據(jù)分析得到獲取下載鏈接的接口,在源文件中搜索發(fā)現(xiàn)了接口的調(diào)用過(guò)程。
接口:/api/download?sign=***×tamp=***&fidlist=%5B***%5D"
在去除了一些不影響調(diào)用結(jié)果的參數(shù)后得知調(diào)用接口主要需要以下參數(shù):
1.sign(用戶(hù)身份)
2.timestamp(時(shí)間戳)
3.fs_id(文件標(biāo)識(shí)碼)
sign的計(jì)算:
算法在源文件中可以發(fā)現(xiàn),“var sign=”搜索全部文件即可發(fā)現(xiàn)算法代碼,將其復(fù)制調(diào)用就能計(jì)算出sign的值。
timestamp的獲?。?/strong>
該值保存在全局變量中,直接yunData.timestamp就可以拿到。
fs_id的獲?。?/strong>
調(diào)用“context.js”腳本就可以拿到文件列表,文件列表中保存了當(dāng)前目錄所有文件的fs_id。
var data=require("system-core:context/context.js").instanceForSystem.getList().listView.listsData;
總結(jié)
以上所述是小編給大家介紹的JS實(shí)現(xiàn)百度網(wǎng)盤(pán)任意文件強(qiáng)制下載,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 手把手搭建Java共享網(wǎng)盤(pán)的方法步驟
- java獲取百度網(wǎng)盤(pán)真實(shí)下載鏈接的方法
- Python 一鍵獲取百度網(wǎng)盤(pán)提取碼的方法
- Linux下使用nextcloud搭建個(gè)人網(wǎng)盤(pán)代碼實(shí)例
- SpringBoot開(kāi)發(fā)案例之打造私有云網(wǎng)盤(pán)的實(shí)現(xiàn)
- VPS搭建離線下載服務(wù)器(后網(wǎng)盤(pán)時(shí)代)
- 利用docker部署nextcloud 網(wǎng)盤(pán)的方法步驟
- 使用electron實(shí)現(xiàn)百度網(wǎng)盤(pán)懸浮窗口功能的示例代碼
- Java如何搭建一個(gè)個(gè)人網(wǎng)盤(pán)
相關(guān)文章
基于JavaScript實(shí)現(xiàn)Tab選項(xiàng)卡切換效果
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)Tabs選項(xiàng)卡切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11js以對(duì)象為索引的關(guān)聯(lián)數(shù)組
在代碼邏輯中更多的是用關(guān)聯(lián)數(shù)組的方式。但即使是這樣我們也很少使用對(duì)象類(lèi)型作為鍵值對(duì)的鍵名。2010-07-07教你3分鐘利用原生js實(shí)現(xiàn)有進(jìn)度監(jiān)聽(tīng)的文件上傳預(yù)覽組件
這篇文章主要給大家介紹了關(guān)于如何3分鐘利用原生js實(shí)現(xiàn)有進(jìn)度監(jiān)聽(tīng)的文件上傳預(yù)覽組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Ajax驗(yàn)證用戶(hù)名或昵稱(chēng)是否已被注冊(cè)
本文主要介紹了Ajax驗(yàn)證用戶(hù)名或昵稱(chēng)是否已被注冊(cè)的實(shí)例方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04微信小程序使用template標(biāo)簽實(shí)現(xiàn)五星評(píng)分功能
這篇文章主要為大家詳細(xì)介紹了微信小程序使用template標(biāo)簽實(shí)現(xiàn)五星評(píng)分功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11