搭建私有下载服务

2017-09-07 七月天
秋名山如今流行飙倒车 (:зゝ∠)

aria2 是一个支持多种协议的轻量级命令行下载工具。既然是命令行工具,不免操作有些不便。不过它提供了 jsonrpc 服务,可以直接向这个接口发送请求。并且有大佬为其搞了一套 webui ,极大的简化了上手难度。

部署这套服务本身就比较方便了,蠢作者又搞了傻瓜式部署脚本 acqua 。分了三个 docker 容器,一个是纯粹的数据卷,另一个是 aria2 的服务,最后一个是 webui 和 方便在线观看视频的一个 httpserver (darkhttpd)。这个容器貌似违反了一个 docker 运行一个服务(进程)的概念。这是本 project 的缺点之一。另一个则是在宿主机上开了多个端口,主要是因为 webui 的那个本身就是个前端,全都是通过 websocket 和 ajax 向 rpc 服务发起的请求。这样 rpc 的端口必须暴露出来。本来是想搞一个 docker network 的,通过 link 的方式进行互联。

试了一下感觉还行吧,第一次要配置一下连接,填上 token

为了更懒一点,用 bookmarklet 做了一个将选中链接直接发送到 rpc server 的 js 脚本

javascript:(function () {  
  var rpcUrl = 'http://rpcAddr:6800/jsonrpc';
  var token = '[email protected]#4$5%6^7&8*9';
  var downloadLink = window.getSelection().toString();
  if (downloadLink.length == 0) {
    alert('no selected text');
    return;
  }
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open('POST', rpcUrl, true);
  xmlhttp.setRequestHeader('Content-Type', 'application/json');
  xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState === 4) {
      if (xmlhttp.status === 200) {
        alert('success');
      } else {
        alert('failed');
      }
    }
  };
  xmlhttp.send(JSON.stringify({
    'jsonrpc': 2,
    'id': 'web',
    'method': 'aria2.addUri',
    'params': [
      'token:' + token,
      [
        downloadLink
      ]
    ]
  }));
}();

bookmarklet 要求没有换行,而且空白要 escape,添加时要做一下处理。另外就是,https 的 domin 内不能发 http 的 XMLHttpRequest


用户评论
开源开发学习小组列表