专栏首页程序员宝库从放弃迅雷到自己开发下载工具

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

前言

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

成果

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

下载(https://pan.baidu.com/s/1eRDVYPc)试用,需要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打包进去了,体积会稍微大点。下载(https://pan.baidu.com/s/1eROfzDw)。

介绍

本下载器开源,代码托管在proxyee-down(https://github.com/monkeyWie/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)协议进行拦截和处理。

觉得本文对你有帮助?请分享给更多人

本文分享自微信公众号 - 程序员宝库(chengxuyuanbaoku)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计

    近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,...

    程序员宝库
  • 给初学者:JavaScript 的常见注意点

    作者: CarterLi 原文:https://segmentfault.com/a/1190000012730162 上篇说了一些 JS 中数组操作的常见误区...

    程序员宝库
  • Nginx 反向代理解决前后端联调跨域问题

    keywords: Nginx反向代理 前后端联调 跨域 ---- 1.什么是跨域 跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏...

    程序员宝库
  • Fiddler成长之路 - 如何将https修改为http协议

    方法二: Fiddler里的Rules—>Customize Rules, 在static functionOnBeforeRequest(oSession:...

    用户5521279
  • 用wget下载需要用户名和密码认证的网站或者ftp服务器文件

    虽然我以前经常写爬虫,但毕竟是代码活,复用性非常低,每次得耗十几分钟解析网页并且写好代码。而熟悉linux的朋友都应该了解wget这个神器,有了url之后一行命...

    生信技能树
  • 【Python环境】Python机器学习库

    Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy。其中Numpy是一个用python实现的科学计算包。包括: 一个强大的N维数组对象Ar...

    陆勤_数据人网
  • Python机器学习工具包

    ? 作者 | 空木 来源 | CSDN社区 Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy。其中Numpy是一个用pytho...

    小小科
  • 【Python环境】python数据挖掘领域工具包

    Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy。其中Numpy是一个用python实现的科学计算包。包括: 一个强大的N维数组对象Ar...

    陆勤_数据人网
  • Wget 大法wget 指定路径,指定文件名下载

    今天用到了Wget,突然一时间想不起来wget的下载到指定目录是哪个参数了,特地把所有参数都弄来,以防又忘记了。毕竟脚本是写了之后,半年都不用改,坑!

    用户2353021
  • python wget下载文件

    -P PREFIX 将文件保存在目录(--directory-prefix=PREFIX)

    py3study

扫码关注云+社区

领取腾讯云代金券