Internet Download Manager (IDM)下载辅助工具,允许主动拉起IDM进行下载,并配置referer、User-Agent等信息。
绿色命令行程序,只需要写入注册表关联:
- 下载ef2.exe到任意目录。
- 双击打开ef2.exe,点击安装按钮即可。
如果觉得不好用,需要卸载:
- 双击打开ef2.exe,点击卸载按钮。
- 删除ef2.exe即可。
ef2.exe最好放到专门的目录,以免移动或丢失,移动后须重新注册。
IDM官方定义了专门的文件格式,拓展名.ef2,用于导入导出下载列表,不过用起来步骤较多且不支持双击打开。本工具不仅支持双击打开ef2文件开始下载并拓展了ef2文件的配置项支持。
ef2文件本质是一个标准的纯文本文件(utf-8编码),展开示例如下:
查看ef2文件示例
< https://img2.example.com/data/1102/94/IMG_0001.jpg referer: https://img2.example.com/data/1102/94/ User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko > < https://img2.example.com/data/1102/94/IMG_0002.jpg referer: https://img2.example.com/data/1102/94/ User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko > < https://img2.example.com/data/1102/94/IMG_0003.jpg referer: https://img2.example.com/data/1102/94/ User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko >
除了IDM官方提供referer、User-Agent关键词,本工具还拓展了一些关键词:
查看拓展的关键词
cookies | cookies 字符串 |
postdata | 改用POST方法send的字符串 |
username | HTTP认证用户名 |
password | HTTP认证密钥 |
filepath | 保存路径(反斜杠形式) |
filename | 文件名(包括拓展名) |
为了方便从浏览器中拉起IDM,本工具自定义了一种名为ef2的协议,能像使用http协议一样使用,格式如下:
协议头 | 内容 | 完整形式 |
---|---|---|
ef2:// | d3d3LmV4YW1wbGUuY29t | ef2://d3d3LmV4YW1wbGUuY29t |
http:// | www.example.com | http://www.example.com |
不难发现所谓的ef2就是将http协议内容部分用Base64编码一下然后将http协议头改为ef2。
如此一来在浏览器中点击该链接便可以拉起IDM。但我们还需拓展一下,以让这种协议不仅能传递下载链接,还要能传递referer、User-Agent等关键词以支持ef2文件类似的功能。
于是我们将协议内容部分由单纯的网址转变为命令行参数形式(为方便演示暂时未使用Base64编码)
www.example.com ----参数化----> -u www.example.com
查看完整参数说明(*含空格等非法字符时请用双引号包裹*)
参数标记 | 参数内容 | 说明示例 |
---|---|---|
u | URL | -u https://img2.example.com/data/1102/94/IMG_0001.jpg |
r | referer | -r https://img2.example.com/ |
a | User-Agent | -a "Bilibili Freedoooooom/MarkII" |
c | cookies | -c cookies字符串 |
d | 改用POST请求send的数据 | -d send字符串 |
U | HTTP认证用户名 | -U username字符串 |
P | HTTP认证密钥 | -P password字符串 |
o | 保存路径(反斜杠) | -o F:\下载 |
s | 文件名(含拓展名) | -s 视频.mp4 |
f | 禁用下载对话框 | -f |
q | 稍后下载(加入默认队列) | -q |
注意别忘了用Base64编码一下然后添加上ef2协议头。
这种ef2协议使用方式基本类似http、ftp等协议,可以直接在浏览器地址栏中输入、添加a标签等href属性并点击、window.open()
等方法打开,当然也可以直接作为命令行参数传递给ef2.exe(Base64编码千万别忘记)。
第一次使用本方法浏览器会弹出打开外部程序请求弹窗,需要点击允许,建议勾选不再提示。
本工具还支持在后台运行,通过websocket协议接受下载数据并传递给IDM。
- 命令行启动ef2.exe同时传递参数
ef2://websocket:${端口号}
,如ef2://websocket:12345
。(不需要Base64加密!) - 使用websocket客户端连接
ws://localhost:${端口号}
,如ws://localhost:12345
。 - 使用websocket.send方法发起下载数据,格式可以是ef2协议(需要Base64编码)字符串。
- 使用websocket.close关闭websocket连接。
- 如果要退出后台运行,请在websocket.close前使用websocket.send方法发送字符串
fin
。
注意也可以用使用ef2协议的方式使用ef2://websocket:${端口号}(不需要Base64加密)
后台运行。
本项目自带了一个标准的es6模块ts/js文件,以default
方式导出了一个对象,支持生成ef2协议字符串。
- 以标准es6模块加载方式加载该模块,如
const ef2 = (await import("ef2.js")).default
。 - 使用
encode()
方式返回编码生成ef2协议字符串,const result = ef2.encode({url: "http://www.example.com/"})
。 - 使用生成的ef2协议拉起IDM进行下载,如
window.open(result)
。
1.0.2版本,新添了一个异步方法nativeMessaging
,传递端口号可以启动webSocket模式。
具体模块定义在ts文件中有详细说明文档,在VSCode中可以获取详细提示。
环境 | 版本 |
---|---|
Windows 11 | 10.0.22000.1 |
VSCode | 1.63.2 |
MSVC | 19.30.30709 |
Windows SDK | 10.0.22000.0 |
说明:
- 需要在Developer Command Prompt for VS中启动VSCode,或者手动将MSVC及Windows SDK添加进系统环境变量。
- 打开main.cpp文件然后f5启用调试,或者运行任务
C/C++: cl.exe build
直接编译发行版。 - 任务
tsc: build - typescript/tsconfig.json
用来编译ef2.ts到js文件,输出目录为dist。
项目中参考其他源码及文章:
项目或文章 | 开源协议 |
---|---|
idm_api | 未知 |
IDMHelper | GPL-3.0 License |
mingw控制台中文乱码 | 未知 |
C++实现utf8和gbk编码字符串互相转换 | 未知 |
base64 | MIT License |
HeadSocket | 未知 |