利用cloudflare的Workers做移动云空间的直链下载

最近在玩盒子脚本,要做一个在线更新的功能,本来以为用alist做下载链就行了,curl -L http://example.com

结果想了一下alist是在境外服务器部署的,文件要先下载到服务器再下载到我本地,这特么得多慢啊,然后了解到了Netdisk Fast Download项目,

项目就是找那些不需要登入就可以直链下载的网盘做解析直链

图片[1]|利用cloudflare的Workers做移动云空间的直链下载 - 5v|5v

这就是直链,因为直链一般都是临时的,所以不能把直链做为固定下载链接,本来是想直接用Netdisk Fast Download项目玩的,结果很多网盘都已经不支持了

中和对比下来我还是选择了移动云空间,虽然只有5G,但是下载速度能达到10M/s,将近700M的文件只下载了17s,而且支持上传apk文件(很多网盘不支持分享apk文件,怕用户拿去做zp软件的下载链)

图片[2]|利用cloudflare的Workers做移动云空间的直链下载 - 5v|5v

下面就是workers的源码,在域名后面拼上URL编码的分享链接就可以实现:分享链接取临时直链重定向下载

图片[3]|利用cloudflare的Workers做移动云空间的直链下载 - 5v|5v

如下拼接:

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
喜欢就支持一下吧
点赞9 分享