版权

版权与最终解释权归迅雷公司所有

迅雷下载引擎

分别由 小米, 猎豹, 360极速浏览器等软件提取

不承担软件无毒, 均为网络搜集, 自行校验签名

相关项目

[MFC --- MiniThunder] : (https://github.com/intlinfo/MiniThunder)

此代码 编译之后, 扔给需要的动态库, 可直接下载使用, 看资源数, 来决定下载速度, 貌似无限速

SDK 接口文档

全局接口

任务接口

接口详细说明

XL_Init

BOOLXL_Init(void)初始化下载引擎,并使其为处理后续操作做好准备。

*返回值:*TRUE表示成功,FALSE表示失败。一些特殊情况会导致初始化失败,如:二进制文件缺失。

*说明:*该接口必须与XL_Unint(void)成对出现。调用该接口的时,xldl.dll会拉起MiniThunderPlatform.exe子进程。

XL_UnInit

BOOL XL_UnInit(void)反初始化下载引擎,释放模块运行期间申请的资源。

*返回值:*TRUE表示成功,FALSE表示失败。

*说明:*调用该接口后,会通知MiniThunderPlatform.exe子进程退出。

XL_CreateTask

HANDLE XL_CreateTask(DownTaskParam &stParam)创建任务。可以新建任务也可以续传任务,参数中IsResume用于表示任务是否是续传任务。其他信息请参考DownTaskParam的定义。

参数: [in] stParam,创建任务需要的参数。

DownTaskParam参考:

struct DownTaskParam

{

int nReserved1;

TCHAR szTaskUrl[2084]; // 任务URL,支持http,https,ftp,ftps格式

TCHAR szRefUrl[2084]; // 可空,HTTP下载所在的网页URL

TCHAR szCookies[4096]; // 可空,浏览器cookie

TCHAR szFilename[MAX_PATH]; // 下载保存文件名.

TCHAR szReserved[MAX_PATH];

TCHAR szSavePath[MAX_PATH]; // 文件保存目录

HWND hReserved;

BOOL bReserved1;

TCHAR szReserved1[64];

TCHAR szReserved2[64];

BOOL IsOnlyOriginal; //是否只从原始地址下载

UINT nReserved2;

BOOL bReserved2;

BOOL IsResume; // 是否用续传

DWORD reserved[2048];

}

*返回值:*返回任务的句柄。

*说明:*任务创建后,是不会马上就下载的,需要调用XL_StartTask。异步执行。

XL_DeleteTask

BOOL XL_DeleteTask(HANDLE hTask)销毁任务,释放任务在运行期间申请的资源。

参数: [in]hTask,任务句柄

*返回值:*TRUE表示成功,FALSE表示失败。当任务不存在时,调用会失败。

*说明:*在任务暂停、成功以及删除任务的时候都需要调用该接口,保证资源尽快的释放。 异步执行,如果任务出于pending状态则不能调用该接口。

XL_StartTask

BOOL XL_StartTask(HANDLE hTask);开始下载。任务创建成功后,不会马上开始下载,需调用此接口才会开始下载。

参数: [in]hTask,任务句柄

*返回值:*TRUE表示成功,FALSE表示失败。当任务不存在时,调用会失败。

*说明:*异步执行,如果任务出于pending状态则不能调用该接口。

XL_StopTask

BOOL XL_StopTask(HANDLE hTask)停止下载

参数: [in]hTask,任务句柄

*返回值:*TRUE表示成功,FALSE表示失败。当任务不存在时,调用会失败。

*说明:*获取任务信息是使用轮询方式的,最终任务下载了多少数据在任务停止下载后查询才是正确的。调用后任务不会立即停止,需轮询到任务状态为PAUSE之后,才能获取到。

XL_QueryTaskInfoEx

BOOL XL_QueryTaskInfoEx(HANDLE hTask, DownTaskInfo & stTaskInfo);查询任务当前信息。

参数: [in]hTask,任务句柄 [out] stTaskInfo, 任务信息。

DownTaskInfo参考:

struct DownTaskInfo

{

DOWN_TASK_STATUSstat;//任务状态

TASK_ERROR_TYPEfail_code;//错误码

TCHARszFilename[MAX_PATH];//文件名

TCHARszReserved[MAX_PATH];

__int64 nTotalSize; // 该任务总大小(字节)

__int64 nTotalDownload; // 下载有效字节数(可能存在回退的情况)

floatfPercent; // 下载进度

intnTotalTime; // 不提供该值

intnSrcTotal; // 总资源数

intnSrcUsing; // 可用资源数

intnReserved1;

intnReserved2;

intnReserved3;

intnReserved;

__int64 nTotalUpload; // 现不提供该值

__int64nDonationP2P; // p2p资源贡献的数据长度

__int64nReserved4;

__int64nDonationOrgin; // 原始资源贡献的数据长度

__int64nDonationP2S; // 镜像资源贡献的数据长度

__int64nReserved5;

__int64 nReserved6;

intnSpeed; // 速度(字节/秒)

intnSpeedP2S; // 加速服务器资源的下载速度

intnSpeedP2P; // peer下载速度

boolIsOriginUsable; // 原始资源是否可用

floatfReserved;

intbReserved;

DWORDreserved[64];

};

enum DOWN_TASK_STATUS

{

NOITEM = 0,

TSC_ERROR,

TSC_PAUSE,

TSC_DOWNLOAD,

TSC_COMPLETE,

TSC_STARTPENDING,

TSC_STOPPENDING

};

enum TASK_ERROR_TYPE

{

TASK_ERROR_UNKNOWN =0x00, // 未知错误

TASK_ERROR_DISK_CREATE =0x01, // 创建文件失败

TASK_ERROR_DISK_WRITE =0x02, // 写文件失败

TASK_ERROR_DISK_READ =0x03, // 读文件失败

TASK_ERROR_DISK_RENAME =0x04, // 重命名失败

TASK_ERROR_DISK_PIECEHASH =0x05, // 文件片校验失败

TASK_ERROR_DISK_FILEHASH =0x06, // 文件全文校验失败

TASK_ERROR_DISK_DELETE =0x07, // 删除文件失败失败

TASK_ERROR_DOWN_INVALID =0x10, // 无效的DOWN地址

TASK_ERROR_PROXY_AUTH_TYPE_UNKOWN = 0x20, // 代理类型未知

TASK_ERROR_PROXY_AUTH_TYPE_FAILED = 0x21, // 代理认证失败

TASK_ERROR_HTTPMGR_NOT_IP =0x30, // http下载中无ip可用

TASK_ERROR_TIMEOUT =0x40, // 任务超时

TASK_ERROR_CANCEL =0x41, // 任务取消

TASK_ERROR_TP_CRASHED= 0x42, // MINITP崩溃

TASK_ERROR_ID_INVALID = 0x43, // TaskId 非法

};

*返回值:*TRUE表示成功,FALSE表示失败。

*说明:*IsOriginUsable,原始资源是否可用,是一个布尔型的参数,但是原始连接原始资源是一个耗时的操作,意味着中间有段时间原始资源是否有效是未知的。这个参数的初始态是false,所以就存在原始资源是有效,但在任务刚开始时这个参数是false的问题。上层在使用该值的时候需要根据业务逻辑再做处理。

XL_DelTempFile

BOOL XL_DelTempFile(DownTaskParam &stParam)删除任务的临时文件。下载引擎会创建 .td 、 .td.cfg后缀的文件用来保存已下载的数据。

参数: [in]stParam,任务参数,参考创建任务中的参数。但是这里只有文件保存的目录和文件名是必须。

*返回值:*TRUE表示成功,FALSE表示失败。

*说明:*文件名是最后真正保存到磁盘的文件名,不带临时文件后缀名。最终保存的文件名会和创建任务不一样,所以这个文件名要以查询任务信息返回的文件名为准。在保存路径下已经存在相同文件名的文件时,最终保存的文件名就会自动改变文件名:filename.zip → filename(1).zip。 异步执行。

XL_SetSpeedLimit

void XL_SetSpeedLimit(INT32 nKBps)设置最大下载速度。

参数: [in]nKBps, 速度上限值

*说明:*异步执行

XL_SetProxy

BOOL XL_SetProxy(DOWN_PROXY_INFO &stProxyInfo)设置下载代理,全局任务代理信息。

参数: [in]stProxyIfno 代理信息

DOWN_PROXY_INFO参考:

enum DOWN_PROXY_TYPE

{

PROXY_TYPE_IE = 0,

PROXY_TYPE_HTTP = 1,

PROXY_TYPE_RESERVED= 2,//不支持该代理

PROXY_TYPE_SOCK5 = 3,

PROXY_TYPE_UNKOWN = 255,

};

enum DOWN_PROXY_AUTH_TYPE

{

PROXY_AUTH_NONE =0,

PROXY_AUTH_AUTO,

PROXY_AUTH_BASE64,

PROXY_AUTH_NTLM,

PROXY_AUTH_DEGEST,

PROXY_AUTH_UNKOWN,

};

struct DOWN_PROXY_INFO

{

BOOLbIEProxy;

BOOLbProxy;

DOWN_PROXY_TYPEstPType;

DOWN_PROXY_AUTH_TYPEstResverd;

TCHARszHost[2048];

INT32nPort;

TCHARszUser[50];

TCHARszPwd[50];

TCHARszDomain[2048];

};

*返回值:*TRUE表示成功,FALSE表示失败。参数非法返回FALSE

XL_SetUserAgent

void XL_SetUserAgent(const TCHAR *pszUserAgent)设置向原始资源的Http任务请求的UserAgent。

参数: [in]pszUserAgent,客户端UserAgent字符串

*说明:*在调用该方法后创建的任务的才会使用新的UserAgent。

XL_ParseThunderPrivateUrl

BOOL XL_ParseThunderPrivateUrl(const wchar_t *pszThunderUrl, wchar_t *normalUrlBuffer, INT32 bufferLen)迅雷专用链是根据一定逻辑从普通URL转成的。

参数: [in] pszThunderUrl,迅雷专用链URL [out] normalUrlBuffer,存储转化后的普通URL的缓冲区 [out] bufferLen,normalUrlBuffer的缓冲区大小,单位字符数

*返回值:*TRUE表示成功,FALSE表示失败

*说明:*此函数功能独立,和其他函数没有依赖关系,可随时单独使用

XL_SetUploadSpeedLimit

void XL_SetUploadSpeedLimit(INT32 nTcpKBps, INT32 nOtherKBps)可根据实际情况设置外网和内网的上传速度。

参数: [in] nTcpKBps, 内网上传速度,单位为KB/s [in] nOtherKBps, 外网上传速度,单位为KB/s

*返回值:*无

XL_CreateTaskByURL

HANDLE XL_CreateTaskByURL(const wchar_t *url, const wchar_t *path, const wchar_t *fileName, BOOL IsResume)通过任务URL、路径、文件名创建任务。

参数: [in] url, 任务URL,不能为空,包括空字符字符长度不能超过2084 [in] path, 任务路径,不能为空,包括空字符字符长度不能超过260 [in] fileName, 任务文件名,不能为空,包括空字符字符长度不能超过260 [in] IsResume, 是否是续传任务

*返回值:*返回任务的句柄

XL_CreateTaskByThunder

LONG XL_CreateTaskByThunder(wchar_t *pszUrl, wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie)通过传递URL和文件名等信息拉起迅雷7的新建面板创建下载任务。

参数: [in] pszUrl,任务URL [in] pszFileName,下载保存的文件名 [in] pszReferUrl,引用页URL [in] pszCharSet,当前网页的字符集 [in] pszCookie,下载数据所需的cookie

*返回值:*0成功,其他为失败

XL_ForceStopTask

BOOL XL_ForceStopTask(HANDLE hTask)强制暂停任务

参数: [in] hTask,任务句柄

*返回值:*TRUE表示成功,FALSE表示失败。当任务不存在时,调用会失败

*说明:*在开启UAC下载大文件时,调用XL_StopTask可能需要消耗比较长的时间。这种情况下如果需要快速暂停任务,可以调用XL_ForceStopTask,不过有可能导致已经下载的还没写到磁盘的数据丢失。

注意事项

全局接口是线程不安全的,且XL_Init外的其他接口必须在该函数成功返回后才能调用;

如果任务处于TSC_STARTPENDING或TSC_STOPPENDING,关于任务的操作只能调用查询任务信息的接口。

接口逻辑说明

任务异步操作

任务的操作是异步执行的。调用接口有两个操作:

操作上层xldl.dll中的虚任务

在命令队列对push一条相关操作的命令

接口层可以操作的任务都是虚任务,真实任务是在MiniThunderPlatfom进程创建的。

任务创建的流程

Xldl创建虚任务;

将操作与参数push到命令队列;

命令处理线程负责执行队列中的命令,与MiniThunderPlatfom同步通信;

MiniThunderPlatfom创建任务成功后,虚任务就可以和实任务映射。

之后所有对virtual task 的操作都将映射到真正的task,并在MiniTP执行真正的操作。 任务信息查询,任务信息的更新需要调用者驱动,需要调用者每隔1s调用一次该接口。

任务信息查询和更新的流程

调用接口查询信息时,先从虚任务查询任务信息,第一次调用的时候肯定没有信息

将查询操作与参数push到命令队列;

命令处理线程负责执行队列中的命令,与MiniThunderPlatfom同步通信;

查询到真实任务信息后,将信息存储到虚任务中;

第二次查询就可以直接查询到任务信息,这些信息是上一次查询到的。

这里就会出现这样的情况,第一次查询操作不能获取到任务信息,即任务处于pause/start_pending状态中。更极端的情况,任务下载完成前一次查询没有调用过,在任务完成后再调用该接口会发现任务进度为0。

子进程异常退出

这种情况是不被欢迎的,但又不可避免。子进程异常退出后MiniThunderPlatfom创建的任务会销毁。这样,虚任务除了与真实任务的映射关系,其实并无意义。这时候,查询任务信息就会返回任务出错,错误码为TASK_ERROR_ID_INVALID(任务id非法)。这时需要重新创建续传任务,接口为XL_CreateTask,结构体中其他参数与创建普通任务相同,参数IsResume设为TRUE。

其它

SDK文件说明Sdk总共有10个二进制文件。二进制文件之间的依赖关系如下图所示:

各个文件功能介绍:

文件名

功能

xldl.dll

导出MiniTP接口

MiniThunderPlatform.exe

独立进程

download_engine.dll

MiniTP核心库

zlib1.dll

压缩通信数据

dl_peer_id.dll

获取迅雷客户端标识

XLBugReport.exe

负责上报捕获到的崩溃

XLBugHandler.dll

负责拉起XLBugReport .exe

minizip.dll、mini_unzip.dll

用于压缩文件崩溃堆栈

atl71.dll

微软提供的程序库

python调用迅雷下载引擎_GitHub - cryzlasm/ThunderOpenSDK: 迅雷开放下载引擎, 收集, 使用...相关推荐

  1. kali linux 最新下载,kali新版本下载,Kali Linux 2019.4 开放下载

    我们非常高兴地宣布2019年的第四个也是最后一个版本,Kali Linux 2019.4,可以立即下载. 2019.4包括一些令人兴奋的新更新: 一个新的默认桌面环境,Xfce 新的GTK3主题(用于 ...

  2. 31个Python实战项目教你掌握图像处理,PDF开放下载

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 近期小白学视觉公众号推出了多篇Python+OpenCV实战项目的文 ...

  3. 开放下载 | 2022阿里妈妈技术年刊来啦!

    年味愈浓,春节将近.阿里妈妈技术年刊如约而至~ 2021 年 5 月,我们开始通过「阿里妈妈技术」 微信公众号持续分享我们的技术实践与经验,覆盖广告算法实践.AI 平台及工程引擎.智能创意.风控.数据 ...

  4. 2016 GIAC全球互联网架构大会圆满结束,全部PPT开放下载

    为期两天(12 月 16 日~17 日)的 2016 GIAC 全球互联网架构大会(http://2016.thegiac.com)在北京悠唐皇冠假日酒店圆满结束,40 位讲师.1000 多位听众共同 ...

  5. Win7停服安全解决方案开放下载(含Server2008)

    提要:根据微软官方通告信息,该公司旗下Windows 7(以下简称Win7).Windows Server 2008(以下简称Server2008)及相关系统已于2020年1月14日正式停止服务,但众 ...

  6. python调用迅雷下载引擎_python将下载地址转换成迅雷和qq旋风的下载地址

    迅雷和qq旋风下载,有加速和离线功能,很方面,我是在网上看到的原始地址和迅雷地址,qq旋风地址的转化原理,然后用python+pyqt写了一个客户端 原理: 迅雷: 迅雷下载地址="thun ...

  7. 如何使用python批量下载-用Python调用迅雷实现后台批量下载

    迅雷9.10实测可用,老版本迅雷应该也可以用,不推荐迅雷极速版 写在前面 最近在学习python的网络爬虫,想要爬取某个网站上的上百万条链接,批量下载链接所指向的图片.文档.视频等内容.大部分的小文件 ...

  8. 用Python调用迅雷实现后台批量下载

    迅雷9.10实测可用,老版本迅雷应该也可以用,不推荐迅雷极速版 写在前面 最近在学习python的网络爬虫,想要爬取某个网站上的上百万条链接,批量下载链接所指向的图片.文档.视频等内容.大部分的小文件 ...

  9. 一行代码实现python调用迅雷下载文件 悄悄的帮你下载你想要的

    一行代码实现python调用迅雷下载文件 前言 解决思路 代码 前言 这几天发现有有一些网站把他们资源的迅雷链接直接亮出来,总是被反爬技术伤害的我心中突然一喜,我用迅雷下载不碍你事了吧,话不多说,开整 ...

  10. 如何用迅雷下载python_用Python调用迅雷批量下载excel表内的链接,并同时对文件重命名(使用的是openpyxl)...

    #首先把文件名放在excel表中的第一列,把对应的链接地址放在第二列 #为什么要用迅雷来下载,因为可以加速啊 #为什么你有这些链接啊,因为我用了八爪鱼爬虫啊 #为什么用八爪鱼爬虫啊,因为python学 ...

最新文章

  1. UVA1391 Astronauts(ACM - ICPC 2006 Europe - Central)(2 - SAT问题、输出方案)
  2. 祝贺中国队夺得第十届苏迪曼杯冠军!
  3. 如何从Bash脚本中检测操作系统?
  4. C++对象模型详解(上)
  5. 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现
  6. 【OpenPose-Windows】运行OpenposeDemo.exe 如何保存图像运行结果及关节点信息
  7. 微软Surface Pro 8曝光:搭载第11代酷睿处理器和Win11系统
  8. python之路 mysql 博客园_python之路--MySQL数据库初识
  9. 指针辨析:悬垂指针、哑指针、野指针、智能指针
  10. 重新安装Jenkins
  11. JavaScript Json对象和Json对象字符串的关系 jsonObj-JsonString
  12. MATLAB将界面语言由中文改成英文
  13. c 程序设计语言简单列子,C语言程序设计实例大全(220个例子)
  14. 离线安装CDH5集群及相关软件
  15. Linux下iwconfig权限,Linux系统中iwconfig命令使用详解
  16. Alfred效率神器
  17. sparkStreaming算子之transform
  18. word双栏添加右栏下脚注而左栏满字方法
  19. mysql错误1548 Cannot load from mysql.proc的最终解决方法
  20. crm day03 创建市场活动

热门文章

  1. 国庆高质量出行,可视化开启智慧旅游
  2. 使用netron实现对onnx模型结构可视化
  3. -XX:PretenureSizeThreshold的默认值和作用浅析
  4. tk域名管理后台_免费tk域名解析(教你免费顶级域名注册的方法)
  5. 利用MATLAB绘制阶梯图(stairs函数)并获取所绘制的阶梯图的横纵坐标值
  6. 计算机端口连接失败,电脑telnet端口(23端口)提示连接失败怎么办?
  7. Qt 字体大小的计算
  8. 【2022刷题】受伤的皇后
  9. 使用基于迭代的敏捷创建里程碑
  10. 关于vlan tag untag 标签 区别