写在开始

曾经有用过aria2这个基于命令行的下载器,但是以前的时候都是直接使用命令下载的,所以每次启动一个下载的时候都会增加一个aria2c的进程,进程数总是有限的,不能开太多,所以我就找了一下其他的方法来使用这个aria2,于是乎就找到了这个RPC调用的方式来使用aria2.

使用方法

第一步: 以RPC模式启动Aria2

启动命令可以很简单,因为可以附加配置文件:

aria2c --conf-path=./aria2.conf
pause

这是windows上的,linux去掉pause就可以了.

然后附加上配置文件:

#允许rpc
enable-rpc=true
#允许非外部访问
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
rpc-listen-port=6800

#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=32
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=16
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M
#单文件最大线程数, 路由建议值: 5
split=256
#下载速度限制
max-overall-download-limit=0
#单文件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单文件速度限制
max-upload-limit=0

#文件保存路径, 默认为当前启动位置
#dir="./"
#使用代理
all-proxy=localhost:1080
#添加引用页
referer=http://images.dmzj.com/

配置文件就这么写就行了.

JSON-RPC向aria2中添加任务

不说多了,直接上Python代码:

import json
from urllib.request import urlopen
jsonreq = json.dumps({'jsonrpc': '2.0', 'id': 'qwer',
                              'method': 'aria2.addUri',
                              'params': [[url],{'refer': url,'dir':filepath}],
                              }).encode()
        c = urlopen('http://localhost:6800/jsonrpc', jsonreq)

这里的一个问题就是发送的时候一定要是以二进制的形式发送,而不是以字符串的形式发送,官方给的例程没有对着这个json进行encode,所以我用的时候就会报错.

这个是针对的http和https这一类的调用,因为我没试过传BT种子,所以也就没有写这一部分,如果我用到了的话会考虑之后再补充上的.XML-RPC也是一种用法,详情见官方文档吧,不想写.

写在最后

其实就是这么简单,配置好aria2之后就直接用一个websocket发送过去就行了,应该没有记错.也就是这样了.

若干年后的后记

这个rpc接口走的不是websocket.

Last modification:January 30, 2020
如果觉得我的文章对你有用,请随意赞赏