最近在玩盒子脚本,要做一个在线更新的功能,本来以为用alist做下载链就行了,curl -L http://example.com
结果想了一下alist是在境外服务器部署的,文件要先下载到服务器再下载到我本地,这特么得多慢啊,然后了解到了Netdisk Fast Download项目,
项目就是找那些不需要登入就可以直链下载的网盘做解析直链
这就是直链,因为直链一般都是临时的,所以不能把直链做为固定下载链接,本来是想直接用Netdisk Fast Download项目玩的,结果很多网盘都已经不支持了
中和对比下来我还是选择了移动云空间,虽然只有5G,但是下载速度能达到10M/s,将近700M的文件只下载了17s,而且支持上传apk文件(很多网盘不支持分享apk文件,怕用户拿去做zp软件的下载链)
下面就是workers的源码,在域名后面拼上URL编码的分享链接就可以实现:分享链接取临时直链重定向下载
如下拼接:
https://d.55v.net/?url=https%3A%2F%2Fwww.ecpan.cn%2Fweb%2F%23%2FyunpanProxy%3Fpath%3D%252F%2523%252Fdrive%252Foutside%26data%3D4260f31ab5a5493df89b0e1e664449aaEiL0%26isShare%3D1
workers可以用自己的绑定域名,代码比较简易,直接复制即可
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
// 解析请求 URL
const url = new URL(request.url)
// 提取 query 参数中的 'url' 参数
const encodedShareUrl = url.searchParams.get('url')
if (encodedShareUrl) {
const shareUrl = decodeURIComponent(encodedShareUrl)
// 处理 shareUrl 中的 hash 部分
const dataMatch = shareUrl.match(/data=([^&]*)/)
const data = dataMatch ? dataMatch[1] : 'No "data" parameter found in the URL hash.'
const url1 = 'https://www.ecpan.cn/drive/fileextoverrid.do?chainUrlTemplate=https:%2F%2Fwww.ecpan.cn%2Fweb%2F%23%2FyunpanProxy%3Fpath%3D%252F%2523%252Fdrive%252Foutside&data='+data+'&parentId=-1';
// 返回提取的 data 参数
const response = await fetch(url1)
const responseBody = await response.json()
// 检查并提取所需的数据
let fileIdList = [];
const cloudpFile = responseBody.var?.chainFileInfo?.cloudpFile;
if (cloudpFile) {
// 将 cloudpFile 作为 fileIdList 数组的第一个元素
fileIdList = [cloudpFile];
}
// 构造结果对象
const result = {
extCodeFlag: responseBody.var?.extCodeFlag ?? 0,
isIp: 0, // 原始数据中不存在,设置为0
shareId: responseBody.var?.chainFileInfo?.shareId ?? null,
groupId: cloudpFile?.groupId ?? '',
fileIdList: fileIdList,
};
const response1 = await fetch('https://www.ecpan.cn/drive/sharedownload.do', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
},
body: JSON.stringify(result)
})
const responseData = await response1.json()
const downloadUrl = responseData.var?.downloadUrl
return Response.redirect(downloadUrl, 302)
} else {
// 如果没有 'data' 参数,则返回错误消息
return new Response('No "data" parameter found in the URL hash.', {
status: 400,
headers: { 'Content-Type': 'text/plain' },
})
}
}
这样在服务器就可以使用CURL直接下载了
curl -L https://d.55v.net/?url=https%3A%2F%2Fwww.ecpan.cn%2Fweb%2F%23%2FyunpanProxy%3Fpath%3D%252F%2523%252Fdrive%252Foutside%26data%3D4260f31ab5a5493df89b0e1e664449aaEiL0%26isShare%3D1 --output "TikTok.apk"
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END