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

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

时间:2023-08-19 09:22:16浏览次数:40  
标签:文件 Windows bitsadmin C++ char https test txt

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

  • 准备工作:先了解一下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.直接获取到直链(优点:较快,缺点:不稳定(一定时间后会失效),有一定概率在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\" ");

问题解决.

 

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

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

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

 

  应用示例:

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

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

void DownoladFromLanzou(const char* WebsiteAddress,const char* Password,const char* Path)
//123云盘文件分享外链链接,文件密码(如果没有密码的话加什么都没有影响),文件保存地址 
{
    char ml[99999];
    sprintf(ml,"bitsadmin /transfer df123 /priority foreground \"https://lz.qaiu.top/parser?url=%s&pwd=%s\" \"%s\"",WebsiteAddress,Password,Path);
    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

标签:文件,Windows,bitsadmin,C++,char,https,test,txt
From: https://www.cnblogs.com/qrszzc/p/Windows-bitsadmin-download.html

相关文章

  • windows10反编译插件ILSpy安装
     ILSpy版本8.1.0.7455ILSpy是唯一免费且开源的.NET反编译器,它基于MIT许可证发布。ILSpy的代码生成和语法高亮功能做的非常好。对于反编译的程序集,它既可以将其保存在一个文件中,也可以为所有文件创建一个项目。ILSpy是一个独立的工具,没有VisualStudio集成。,ILSpy是为了完......
  • c++[1]
    命名空间:为什么要使用命名空间?使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,于是就有了关键字namespace举个例子:#include<iostream>#include<stdlib.h>//头文件中包含rand函数的定义intrand=10;//命名冲突intmain(){ printf("%d",rand);......
  • C++中String的语法及常用接口用法
    在C语言中,string是一个标准库类(class),用于处理字符串,它提供了一种更高级、更便捷的字符串操作方式,string 类提供了一系列成员函数和重载运算符,以便于对字符串进行操作和处理。一、string类在学习string前,我们不妨先来了解一下string类到底是什么,有什么用呢?我们先来了解一下基本......
  • C++项目实战之演讲比赛流程管理系统
    演讲比赛流程管理系统1.演讲比赛程序需求1.1比赛规则学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛每名选手都有对应的编号,如10001~10012比赛方式:分组比赛,每组6个人第一轮分为两个小组,整体按照选手编号进行抽签后顺序演讲10个......
  • 关于 STM32 在使用 C++ 进行编程时无法进行中断(触发中断就死循环)的问题
    他妈的!!!就因为这破事导致我浪费了两天的时间!!!都是基础不扎实的锅,导致我没能第一时间想到问题的关键好了,平复一下心情,快速的写一篇博客来记录这个叼问题解决方法先把结论放在这里:用extern"C"{}把中断函数包起来//就像这样extern"C"{voidEXTI4_IRQHandler(){HAL_GP......
  • C++11新特性——1.4-1.5 final和override
    1.4final原文:https://subingwen.cn/cpp/final/总结:1.final限制某个类不能被继承,或限制某个虚函数不能被重写2.final修饰虚函数或者类3.final关键字写到虚函数或类后面classBase{public:virtualvoidtest(){cout<<"Baseclass.........
  • c++ 常用的 STL
    c++中常用的STLvector//vector变长数组倍增的思想(倍增:系统为每一个程序分配空间的时候,所需要的时间和空间大小无关,与请求次数相关)尽量减少请求的次数/*返回元素的个数size()判断是否为空empty()清空clear()front()返回第一个数back()返回最后一个数push......
  • Windows·FTP爆破应急响应
    0x00前言 FTP是一个文件传输协议,用户通过FTP可从客户机程序向远程主机上传或下载文件,常用于网站代码维护、日常源码备份等。如果第三者通过FTP匿名访问或者弱口令获取FTP权限,可直接上传webshell,进一步测试提权,直至控制整个网站服务器。0x01应急场景 从昨天开始,网站响应速度......
  • [AT_ABC106_C]题解(C++)
    PartIPreface原题目\(\text{(Luogu)}\)原题目\(\text{(AtCoder)}\)PartIISketch给定一个字符串\(s\)以及一个整数\(k\)。该字符串为纯数字串。其中的数字\(x\)会在\(k\)天后变为\(x^{k-1}\)个\(x\)。求出\(10^{15}\)天后,串\(s\)的第\(k\)位是什么......
  • [AT_ABC106_D]题解(C++)
    PartIPreface原题目\(\text{(Luogu)}\)原题目\(\text{(AtCoder)}\)PartIISketch给定正整数\(n,m,q\)。接下来给定\(m\)组\(x_i,y_i\),表示一列列车的起始站和终点站。在接下来给定\(q\)组\(l_i,r_i\)。对于每组询问,回答有多少\(x_i\geql_i\operatorna......