Aria2 是一款轻量级的跨平台的多线程下载工具,支持 Http/Https、Ftp、BitTorrent、Metalink 等主流协议,功能非常全面。和IDM或EagleGet这些下载工具相比,aria2是一款纯命令行工具,没有图形界面,但可以通过rpc的方式提供交互式下载,这个是它的一个缺点,同时也是它的一个优点。它没有图形界面,使得可以在远程服务器、路由器、nas等平台上运行它,通过rpc交互的方式,实现离线下载。
虽然上现在已经有webui-aria2, 以及 yaaw等一些第三方的比较成熟的界面工具。但了解一下其交互协议,实现一个更加灵活,更适合自己的功能强大的下载工具,对于程序员来说,还是一个比较指的折腾的的事情。
配置Aria2
在启动Aria2前,我们需要进行一些参数的配置,这些配置有两种方式,通过命令行或配置文件。当默认的配置较多的时候,通过命令行的方式显得冗繁和不直观,我们一般是通过配置文件的方式,这里是一个配置文件示例:
?
这个配置我也是网上摘录的,完整配置可以参考官方文档。一般的时候调整下dir=R:\Downloads这个文件默认报错路径这个选项即可,配置完成后,将其保存为一个文本文件,如aria2.conf。然后可以通过启动参数:--conf-path来启动它:
.\aria2c --conf-path=aria2.conf
注意:这个配置文件里面有一个配置项,input-file=aria2.session,表示的是保存未完成的会话,启动的时候会读取该文件来获取上次未完成的任务,如果没有缺少这文件会无法启动,因此我们必须判断下这个文件是否存在,如果没有,则需要手动创建一个。
RPC交互
Aria2的交互协议是json-rpc,可以通过http和websocket两种方式来进行交互,它支持的交互方法可以参考官方文档Aria2 Methods,一个简单的示例如下:
{
????"jsonrpc":?"2.0",
????"id":?"1",
????"method":?"aria2.addUri",
????"params":?[
????????[?"http://127.0.0.1:8000/www/123.jpg"?]
????]
}
也可以加一些参数:
{
????"jsonrpc":?"2.0",
????"id":?"1",
????"method":?"aria2.addUri",
????"params":?[
????????[?"http://127.0.0.1:8000/www/123.jpg"?]
????????{?"dir":?"r:/downloads"?}
????]
}
返回结果为:
{
????"id":?"2",
????"jsonrpc":?"2.0",
????"result":?"c470acbc661144b2"
}
错误消息:
{
????"id":?"2",
????"jsonrpc":?"2.0",
????"error":?{
????????"code":?1,
????????"message":?"The?parameter?at?0?has?wrong?type."
????}
}
另外,如果是websocket的方式下,还可以收到一些通知消息:
{"jsonrpc":"2.0","method":"aria2.onDownloadStart","params":[{"gid":"44e38580434f9496"}]}
{"id":null,"jsonrpc":"2.0","error":{"code":-32600,"message":"Invalid?Request."}}
限于篇幅所限,这里只进行了一些基本的介绍,其rpc都是遵循json-rpc格式的消息,是非常容易解析和理解的,在后面的博文里,我会再详细介绍下其常用接口功能,打造一个简单的下载工具。
参考文档
主要文档:
一些国内的博客文章也是较好快速上手指南
原文:https://www.cnblogs.com/TianFang/p/12823107.html