如何在C++程序中借助Windows自带的bitsadmin命令从123云盘(不开通直链或会员)上下载文件

最近,我想发布一个程序,里面想嵌入一些比较大的文件,但是如果直接用资源方式嵌入的话程序的体积就非常大,所以我想用从网上下载的方式获取这些文件。之前我试过很多方式,都没有成功,最后找到了这种方式...

  • 准备工作:先了解一下bitsadmin命令的语法,详见官方文档

https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/bitsadmin

简单来说,下载文件就是以下命令:

bitsadmin /transfer 任务名(自己随便取) 文件的网络URL地址 文件将要保存的本地路径(可使用环境变量)

如果是特别大的文件,可以提高优先级:

bitsadmin /transfer 任务名(自己随便取) /priority foreground 文件的网络URL地址 文件将要保存的本地路径(可使用环境变量)

 

  • 第一步:向123云盘上传想要下载的文件,相信大多数朋友都很熟悉,这里不再过多赘述。我已经上传好了一个文件test.txt,如图:   

 

 

 

 

 

  • 第二步:获取文件在123云盘上的真实URL地址

  我发现,如果直接点下载,取得的网址是个临时的,不能长期使用,并且在bitsadmin里面没法用

  现在有两种方式:

   1.直接获取到直链(优点:较快,缺点:不稳定(24小时后会失效),有一定概率在bitsadmin下载时会有问题)

    这里使用一个蓝奏云API解析网站,https://lz.qaiu.top,将蓝奏云分享的网址放在上面就行了

    

    点击下面的"复制链接":

     复制上面的 "data",就是文件的直链地址.

    https://117-95-171-218.pd1.123pan.cn:30443/download-cdn.123pan.cn/123-679/842d0111/1813787329-0/842d0111878ec75f8e2829c2f0ad22a7/c-m2?v=5&t=1692465408&s=16924654086762a3a6304dcf35fc339048b8ab8607&r=75Z2Z6&bzc=2&bzs=313831333738373332393a31323833323832303a32343a30&filename=test.txt&x-mf-biz-cid=193b6069-4ee0-4ddb-bc6a-575843292db3-63d50b&auto_redirect=0&xmfcid=ab1fbb46-626e-4f2d-8e3f-1bc3b3c8d85f-0-9eed82220

 

   2.实时解析(优点:稳定,用bitsadmin下载完全没问题,缺点:相对于方法1慢大概五六秒

    我翻到了上面API解析的Github项目地址:netdisk-fast-download

    我发现他这有一个API

    

 

     这个API的使用也非常方便,他也给了详细的介绍,格式如下:

  https://lz.qaiu.top/parser?url=文件分享链接&pwd=密码(可空)

    举个例子:直接下载文件

    https://lz.qaiu.top/parser?url=https://www.123pan.com/s/I6PlVv-Vgti.html

    自己尝试发现可以直接放在bitsadmin里面下载

 

  • 第三步:万事俱备,只欠下载

   1.将获取到的URL贴进上面的bitsadmin下载语句,如下:

bitsadmin /transfer mDL /priority foreground "https://117-95-171-218.pd1.123pan.cn:30443/download-cdn.123pan.cn/123-679/842d0111/1813787329-0/842d0111878ec75f8e2829c2f0ad22a7/c-m2?v=5&t=1692465408&s=16924654086762a3a6304dcf35fc339048b8ab8607&r=75Z2Z6&bzc=2&bzs=313831333738373332393a31323833323832303a32343a30&filename=test.txt&x-mf-biz-cid=193b6069-4ee0-4ddb-bc6a-575843292db3-63d50b&auto_redirect=0&xmfcid=ab1fbb46-626e-4f2d-8e3f-1bc3b3c8d85f-0-9eed82220" "%USERPROFILE%\Desktop\test.txt" 

  桌面上成功地出现了test.txt

  2.将实时解析的网址贴进上面的bitsadmin下载语句,如下:

bitsadmin /transfer mDL /priority foreground "https://lz.qaiu.top/parser?url=https://www.123pan.com/s/I6PlVv-Vgti.html" "%USERPROFILE%\Desktop\test.txt" 

  桌面上成功地出现了test.txt

 

 

  • 第四步:将下载语句加入程序

  这个就非常简单了,用system语句就行了

  C++:注意反斜杠和引号插入的时候用 " \\ " " \" " 转义

  直接用URL:

system("bitsadmin /transfer mDL /priority foreground \"https://117-95-171-218.pd1.123pan.cn:30443/download-cdn.123pan.cn/123-679/842d0111/1813787329-0/842d0111878ec75f8e2829c2f0ad22a7/c-m2?v=5&t=1692465408&s=16924654086762a3a6304dcf35fc339048b8ab8607&r=75Z2Z6&bzc=2&bzs=313831333738373332393a31323833323832303a32343a30&filename=test.txt&x-mf-biz-cid=193b6069-4ee0-4ddb-bc6a-575843292db3-63d50b&auto_redirect=0&xmfcid=ab1fbb46-626e-4f2d-8e3f-1bc3b3c8d85f-0-9eed82220\" \"%USERPROFILE%\\Desktop\\test.txt\" ");

  实时解析:

system("bitsadmin /transfer mDL /priority foreground \"https://lz.qaiu.top/parser?url=https://www.123pan.com/s/I6PlVv-Vgti.html\" \"%USERPROFILE%\\Desktop\\test.txt\" ");

问题解决.

 并且如果要让程序判断文件是否成功下载,可以判断system函数的返回值,0为成功

  • 进阶:将下载语句封装进函数

  也不是非常困难,直接放代码:

int DownoladFrom123(const char* WebsiteAddress,const char* Password,const char* Path)
//123云盘文件分享外链链接,文件密码(如果没有密码的话加什么都没有影响),文件保存地址 
//返回0为成功
{ char ml[99999]; sprintf(ml,"bitsadmin /transfer df123 /priority foreground \"https://lz.qaiu.top/parser?url=%s&pwd=%s\" \"%s\"",WebsiteAddress,Password,Path); return system(ml); }

 

  应用示例:

#include<bits/stdc++.h>
using namespace std; 
int DownoladFrom123(const char*,const char*,const char*);

int main()
{
    
    DownoladFrom123("https://www.123pan.com/s/I6PlVv-Vgti.html","0","%userprofile%\\desktop\\test.txt");
    
    return 0;
}

int DownoladFrom123(const char* WebsiteAddress,const char* Password,const char* Path)
//123云盘文件分享外链链接,文件密码(如果没有密码的话加什么都没有影响),文件保存地址 
//返回0为成功
{ char ml[99999]; sprintf(ml,"bitsadmin /transfer df123 /priority foreground \"https://lz.qaiu.top/parser?url=%s&pwd=%s\" \"%s\"",WebsiteAddress,Password,Path); return system(ml); }

 

 

 

参考资料:(感谢以下文档/文章)

bitsadmin使用方法:

https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/bitsadmin

https://blog.csdn.net/u012206617/article/details/119136825

https://www.likecs.com/show-305506404.html

123云盘URL解析:

https://lz.qaiu.top/

https://github.com/qaiu/netdisk-fast-download

https://www.github.com/HurryBy/lanzou-directlink

posted @ 2023-08-19 09:19  铜锣烧爱吃关东煮  阅读(746)  评论(0编辑  收藏  举报