从放弃迅雷和IDM到自己开发下载工具

228

前言

在这个网络带宽飞速增长的年代,下载文件要充分利用好网速就得用到下载工具,比如迅雷、IDM。然而贫穷限制了下载速度,这两个下载软件不花钱毫无体验可言。本人两年迅雷年费会员在离线下载越来越形如虚设的情况下,选择投入了IDM的怀抱,然而IDM丑陋的界面和破解版的无限弹框让我产生了开发一款属于自己下载器的想法。

成果

没图说个xx,下图是在20M带宽的情况下载网盘文件的过程,可以看到网速基本跑满。

百度网盘下载

下载试用,需要JAVA8+运行环境。
启动:

java -jar proxyee-down-1.3.jar
访问http://127.0.0.1:9999,点击ProxyeeRoot ca.crt下载证书并安装到受信任的根证书颁发机构中
设置浏览器http代理为127.0.0.1:9999即可

关于证书导入

  • windows系统

访问http://127.0.0.1:9999,下载证书,要选择受信任的根证书颁发机构目录
导入证书

  • 安卓

原生浏览器访问http://serverIp:9999,下载证书

clipboard.png

介绍

本下载器开源,代码托管在proxyee-down,是一款基于http代理服务器嗅探http下载请求的下载工具,支持插件化开发,目前内置百度云大文件下载限制插件百度云合并下载限制插件

技术简介

本项目使用java+netty+spring boot+vue.js+element ui编写,这里只谈一谈核心的技术点,细节请参考源码。

  1. http代理
    基于http代理服务器来实现下载请求的嗅探,实现了https的报文解密,在代理服务器嗅探到下载请求头时,进行拦截处理。

    //例如Content-Disposition请求头拦截
    Content-Disposition,attachment;filename=FileName.txt

    之后修改响应体跳转到前端下载页面

    HTTP/1.1 200 OK
    Conten-type:text/html
    Conten-length:129
    
    <script>window.top.location.href='http://localhost:9000"</script>
  2. http断点下载
    拦截到下载请求之后,自动试探下载请求是否支持http断点下载。

    //发送range请求头,下载一个字节
    range:bytes=0-0

    若支持断点下载则可开启分段下载

    //返回206响应码
    HTTP/1.1 206 Partial Content

    根据前端填写的下载段数计算出每个请求的下载范围

    //例如文件总大小为10byte分成2段下载
    //第一段请求头
    range:bytes=0-4
    //第二段请求头
    range:bytes=5-9

    下载完之后所有段落按顺序合并,看看这里是不是很像IDM,其实原理是一样的。

后记

在写此下载器的过程中对http和https协议又有了新的认识,特别是https若不能实现https的报文解密就做不到https下载请求的嗅探,在熟悉https协议后采用MITM(中间人攻击)动态生成ssl证书的方式,来对https的报文进行解密。http代理服务器核心已经独立出来了,托管在proxyee,可以轻易的对http(s)协议进行拦截和处理。

你可能感兴趣的

104 条评论
尼古拉斯蛋炒饭 · 2017年12月10日

mac可以用吗?用了一下没有成功

+8 回复

7

@尼古拉斯蛋炒饭 可以的啊,你哪个步骤出了问题

mokeyWie 作者 · 2017年12月10日
5

@mokeyWie 下载证书之后没有跳到下载资源的页面

尼古拉斯蛋炒饭 · 2017年12月11日
8

@尼古拉斯蛋炒饭 浏览器设置了代理吗

mokeyWie 作者 · 2017年12月11日
罗俊威 · 2017年12月12日

给力

+7 回复

晚风 · 2017年12月10日

回头试试,不过大概老哥没试过fdm吧

+6 回复

3

@晚风 没有用过fdm?

mokeyWie 作者 · 2017年12月10日
Tbiao · 2017年12月08日

厉害??

+5 回复

3

嘿嘿,喜欢就帮忙点个star吧

mokeyWie 作者 · 2017年12月09日
stayredmax · 2017年12月18日

Mac设置了Firefox代理后点击文件还是跟往常一样跳转到了网盘了。根证书已全部trust。 不晓得问题出在哪里,好困惑?

+5 回复

4

换chrome试试

mokeyWie 作者 · 2017年12月18日
落雪未满 · 2017年12月10日

对it狗来说大概能知道怎么玩,对非相关的技术人员来说,使用难度可能比较大。我分享到群里后,已经有七八个人问我怎么用了?如果能优化的更简单就更棒了

+4 回复

5

@落雪未满 现在这个版本对小白来说是不太友好,后续还会更新优化的,谢谢你的分享啦老哥。目前我这还有很多future要去实现,毕竟这算个内测版本吧?

mokeyWie 作者 · 2017年12月10日
0

@mokeyWie 是feature吗老哥0w0

z1shiki · 2017年12月12日
0

@z1shiki 不要在意这些细节?,总之还有很多待实现的功能

mokeyWie 作者 · 2017年12月12日
darkfitch · 2017年12月09日

完全小白表示不会用,这个是没有图形界面嘛?或者说要借用百度盘的壳?求告知

+3 回复

0

图形界面就是网页,下载的时候会自动跳转的

mokeyWie 作者 · 2017年12月09日
2

可以下载exe版本的,直接运行,然后访问http://127.0.0.1:9999,点击ProxyeeRoot ca.crt下载证书并安装到受信任的根证书颁发机构中
设置浏览器http代理为127.0.0.1:9999即可

mokeyWie 作者 · 2017年12月09日
1

@mokeyWie 谢谢 回头回去了我去试试

darkfitch · 2017年12月09日
青春向来如此 · 2017年12月12日

666

+3 回复

scienceasdf · 2017年12月12日

百度云还是一百多k的速度啊?

+3 回复

0

百度云单独一个文件下载会有10KB的速度限制的,你要选两个文件或者一个文件夹一起下载就可以起飞

mokeyWie 作者 · 2017年12月12日
aiqidao · 2017年12月13日

厉害了

+3 回复

bubao · 2017年12月13日

linux表示心痛

+3 回复

1

跨平台的,有浏览器就能用

mokeyWie 作者 · 2017年12月13日
bubao · 2017年12月13日

嗯.......没看到怎么用,我可能是假的程序员

+3 回复

3

在那个效果图下面有使用说明的~

mokeyWie 作者 · 2017年12月13日
2

我chrome没有代理配置 用插件?

bubao · 2017年12月13日
2

@bubao 可以用Proxy SwitchyOmega插件,也可以直接在设置里配置代理服务器

mokeyWie 作者 · 2017年12月13日
niunan · 2017年12月14日

支持支持?

+3 回复

窝窝头 · 2017年12月09日

双击666

+2 回复

Scoripion · 2017年12月09日

不错 老哥

+2 回复

0

稳如狗

mokeyWie 作者 · 2017年12月10日
耿裝 · 2017年12月12日

点赞!

+2 回复

zkl2333 · 2017年12月12日

先收藏 在给个star 老铁加油

+2 回复

1

@zkl2333 谢谢这位老铁的支持?

mokeyWie 作者 · 2017年12月12日
xiayiguo · 2017年12月12日

老哥,我安装了CA证书,并且chrome 浏览器中设置了访问端口,用哪个网址登陆啊?http://127.0.0.1:9999/ 这个网址刷新了,还是只有下载CA证书的链接

+2 回复

1

安装好了证书之后,就可以去下载了,到时候会弹出下载页面的

mokeyWie 作者 · 2017年12月12日
3

@mokeyWie 证书安装好了, 在那边查看啊? 我安装时,已经提示导入成功,然后我也在浏览器中设置代理为 127.0.0.1 端口 为 9999, 但是没有自动弹出下载页面

xiayiguo · 2017年12月12日
1

看看你浏览器是不是在用代理服务器上网,chrome的话按F12,看Security选项卡里的Valid certificate栏,没问题的话应该是显示The connection to this site is using a valid, trusted server certificate issued by ProxyeeRoot.

mokeyWie 作者 · 2017年12月12日
手残的烦恼 · 2017年12月12日

点赞啊,老哥稳

+2 回复

现代魔法师 · 2017年12月12日

有个软件叫 fdm。。。。。。free download manager。。。开源的。。。

+2 回复

1

@现代魔法师 我要造一个接地气的轮子?,会以插件话开发的方式定制各种网站的下载需求的

mokeyWie 作者 · 2017年12月12日
2

@mokeyWie 当然。。。能造轮子的都是大神。。。我只是说下有这个东西。。。另外这个东西在它的官网上目前有两个版本 v5 和 v3。。。v5 更现代化,v3 功能更全。。。然后你在设计需求的时候,说不定可以参考下 v3 的功能。。。

现代魔法师 · 2017年12月12日
0

@现代魔法师 嗯嗯,谢谢你给的建议。功能都会慢慢加上的,当然有人参与进来就更好了。

mokeyWie 作者 · 2017年12月12日
载入中...