Code Monkey home page Code Monkey logo

ef2's Introduction

Internet Download Manager (IDM)下载辅助工具,允许主动拉起IDM进行下载,并配置referer、User-Agent等信息。


安装/卸载

绿色命令行程序,只需要写入注册表关联:

  1. 下载ef2.exe到任意目录。
  2. 双击打开ef2.exe,点击安装按钮即可。

如果觉得不好用,需要卸载:

  1. 双击打开ef2.exe,点击卸载按钮。
  2. 删除ef2.exe即可。

ef2.exe最好放到专门的目录,以免移动或丢失,移动后须重新注册。


使用方式

※ IDM导出文件

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 文件名(包括拓展名)
值得注意的是如果ef2文件中有多条下载数据(即批量下载),双击打开将直接添加到IDM默认下载列表,需要到IDM中自己开启队列来开始下载。

※ ef2协议

为了方便从浏览器中拉起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

本工具还支持在后台运行,通过websocket协议接受下载数据并传递给IDM。

  1. 命令行启动ef2.exe同时传递参数ef2://websocket:${端口号},如ef2://websocket:12345。(不需要Base64加密!
  2. 使用websocket客户端连接ws://localhost:${端口号},如ws://localhost:12345
  3. 使用websocket.send方法发起下载数据,格式可以是ef2协议(需要Base64编码)字符串。
  4. 使用websocket.close关闭websocket连接。
  5. 如果要退出后台运行,请在websocket.close前使用websocket.send方法发送字符串fin

注意也可以用使用ef2协议的方式使用ef2://websocket:${端口号}(不需要Base64加密)后台运行。

※ ef2.js

本项目自带了一个标准的es6模块ts/js文件,以default方式导出了一个对象,支持生成ef2协议字符串。

  1. 以标准es6模块加载方式加载该模块,如const ef2 = (await import("ef2.js")).default
  2. 使用encode()方式返回编码生成ef2协议字符串,const result = ef2.encode({url: "http://www.example.com/"})
  3. 使用生成的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

说明:

  1. 需要在Developer Command Prompt for VS中启动VSCode,或者手动将MSVC及Windows SDK添加进系统环境变量。
  2. 打开main.cpp文件然后f5启用调试,或者运行任务C/C++: cl.exe build直接编译发行版。
  3. 任务tsc: build - typescript/tsconfig.json用来编译ef2.ts到js文件,输出目录为dist。

开源许可

MIT License

项目中参考其他源码及文章:

项目或文章 开源协议
idm_api 未知
IDMHelper GPL-3.0 License
mingw控制台中文乱码 未知
C++实现utf8和gbk编码字符串互相转换 未知
base64 MIT License
HeadSocket 未知

ef2's People

Contributors

motoorikashin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

ef2's Issues

How to compile the project?

Hi,

I have Visual Studio 2022 installed and followed your compilation instructions on the front page. However, I found that VSCode is not able to compile the project. I don't remember the exact error message, but it seems like some VSCode extension is required. So, I installed this one:

image

After that, when I press F5, I get this:

image

Have I missed anything?

ef2文件不支持utf-8编码的格式

您好:试用了您发布的工具,非常方便,特别是filename这个扩展很有效的解决了一些下载的问题,但是使用过程中发现如果导出的ef2格式文件为utf-8编码的话,解析到idm中会出现乱码,能否考虑后续对应utf-8编码的文件?

特殊链接(可能是跳转)会导入失败提示:未找到有效链接

一些特殊的链接,如: https://www.screenscraper.fr/api2/mediaGroup.php?devid=jelos&devpassword=jelos&softname=zzz&crc=&md5=&sha1=&groupid=2917&media=logo-monochrome&mediaformat=png

看上去不是个文件,是重定向到某个文件的,会在解析的时候失败,但是用 IDM 直接导入是可以,能否修复不要提示能导入,谢谢

sample.ef2:

<
https://www.screenscraper.fr/api2/mediaGroup.php?devid=jelos&devpassword=jelos&softname=zzz&crc=&md5=&sha1=&groupid=2917&media=logo-monochrome&mediaformat=png
referer: https://www.screenscraper.fr/api2/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
>

有两个BUG!

第一个就是 -O 设置下载路径 中文会显示???乱码

第二个就是 -a 设置指定ua 会无效!神奇的是用 -u 设置ua ,下载地址也是-u ,虽然ua会被识别成到下载链接后面 但是IDM可以识别到指定ua 什么时候可以修复这些问题呢!!

安装后还是无法下载ef2

安装后还是显示IDM目前不支持ef2数据传输协议。或许这是个拼写错误,请检查拼写后重试。IDM版本6.4.1version3

开发扩展(Manifest V3)版本

exe文件天然旧具有不安全感,Windows用户天然就抵触运行来历不明的exe文件,而且本人学习C++实在浅陋,WindowsAPI更是学了点皮毛,虽有精进之心,却没那个精力和能力。
于是我就想既然IDM官方有浏览器扩展文件,我们也可以逆向着写一个,浏览器扩展而已,不像exe那样有病毒之虑。
其实之前就研究过IDM官方扩展与IDM的通信机制,总共三条信道:

  1. websocket:这是全双工的网络通信,IDM后台程序有web服务器,扩展访问本地端口来交流信息,这是官方的首选方案。
  2. http POST:这是单向web通信,用来发送单条下载数据。
  3. Native Message:扩展专属与本机程序通信的机制,类似于websocket。

作为第三方,首选当然是websocket,毕竟在js环境中有开箱即用的支持,唯一的问题是IDM后台web服务器有白名单机制,来自第三方的web请求直接pass(http POST也一样pass)!根本无法建立连接。实际上是通过referer,这在Manifest V3时代通过declarativeNetRequestAPI似乎可以伪装一下解决?没试过🤣
次选方案Native Message,这在扩展环境是也是开箱即用的支持,不过这个也有白名单机制,不过这个白名单判定权在浏览器一方,而不是IDM本身,所以绕过方式非常简单,生成一份伪·白名单覆盖IDM安装目录下的json文件即可。

目前选择还是通过Native Message,扩展负责与IDM建立连接,然后暴露接口到页面上下文中,实现页面js直接拉起IDM进行下载的目的,相比于原exe方案,有以下优势:

  1. 无须写入注册表关联,对于讨厌别人乱动注册表的人来说是好事。
  2. 可以直接批量下载无须通过ef2文件。
  3. 未来或许可以实现主动呼出IDM浮动条。

唯一的劣势是第一次安装需要覆盖白名单,相比写入注册表完全由exe代劳,白名单可得用户自己去放,毕竟每个人IDM安装路径不尽相同——未来或许可以使用批处理(bat文件)处理,双击一下也很快🤣

其实选择扩展,主要还是为了第3点,拉出IDM浮动条,这个浮动条相比直接下载数据强大太多:

  1. 可以用来解析m3u8文件,这以往只能靠IDM自己捕获,本地想主动解析都没门!
  2. 可以用来自动封装DASH流媒体,再也不用分别下载一条视频轨一条音频轨了!
  3. 只要IDM官方浮动条支持的功能,大概都可以主动呼出……

目前虽然有了些进展,但只能通过Manifest V2扩展,因为拉出浮动条的很多参数只有MV2的API才获取的到。如何以MV3的API实现,还是得看IDM官方的扩展样品放出代码,毕竟那些参数究竟有何意义只有IDM官方才知道。
Google已于2022年6月禁止新MV2扩展上架,并将在2023年6月彻底禁止chorme运行MV2扩展,留给IDM的时间已经不多了,所以符合新标准扩展什么时候上架,快点端上来吧IDM🤣

当前进度并未推送上来,毕竟第3点不实现扩展相比于exe优势实在不大,这个feature可能要长期放着了。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.