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

前言

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

成果

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

百度网盘下载
百度网盘下载

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

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

更新个exe版本的,把JRE打包进去了,体积会稍微大点
下载

介绍

本下载器开源,代码托管在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)协议进行拦截和处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,293评论 19 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 12,676评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 10,600评论 3 82
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 7,699评论 0 6
  • 上一篇:噩梦浮生 第三集 第四集 1. 曹成瑞想起以前看村上春树的《且听风吟》。 村上春树坐在厨房餐桌旁,一边喝着...
    志薄儿阅读 3,203评论 0 1