前言

aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.

aria2 是一款使用 C++ 编写的轻量级跨平台命令行下载工具,支持 HTTP/HTTPS, FTP, SFTP, BitTorrent 和 Metalink 等多种协议。

特点

aria2 具备很多功能特性,这里只简单罗列一些本人认为很有用的:

  • 命令行工具
  • 支持多协议:HTTP(S)/FTP/SFTP/BitTorrent/Metalink
  • 支持 HTTP 认证,支持 HTTP 代理,Cookie,自定义头部···
  • 上传/下载速度限制
  • 支持 JSON-RPC/XML-RPC 轻量级远程调用接口 ······

安装

aria2 支持跨平台,这里主要介绍在 Windows 平台上的安装与使用。

  • 安装:具体步骤如下: 1)下载主程序(aria2c.exe):在 releases 下载合适版本,将其中的主程序 aria2c.exe 拷贝到 D:\aria2 (该路径自主决定)中。 2)配置环境变量:将 aria2c.exe 配置到系统环境变量,方便命令行使用:控制台输入 systemdm.cpl,选择 Advanced -> Environment Variables,将 D:\aria2 配置到环境变量即可。

到此,aria2 的安装就完成了,此时我们就可以直接在命令行下运行 aria2 进行下载了。

# 下载一张图片,此时下载路径为当前命令执行路径
aria2c "http://pic16.nipic.com/20111006/6239936_092702973000_2.jpg"

常用命令选项

aria2 是一个命令行下载工具,其格式为:

aria2c [<OPTIONS>] [<URI>|<MAGNET>|<TORRENT_FILE>|<METALINK_FILE>] …

可以看到其提供了很多命令行选项(OPTIONS),下面介绍一些常用的选项:

  • 基础选项

1)-d,--dir=<DIR>:下载路径(默认为当前路径) 示例:下载图片到 D 盘根目录

# 下载到当前目录
aria2c http://pic39.nipic.com/20140321/18063302_210604412116_2.jpg -d .
# 下载到 D 盘
aria2c http://pic39.nipic.com/20140321/18063302_210604412116_2.jpg --dir="D:/"

2)-i,--input-file=<FILE>:从文件读取要下载的 URIs。可以将要下载的多个 URI 写入到一个文件中,每个 URI 独占一行,然后使用该选项进行下载。 :官方文档说 URI 之间使用空格进行隔离,当在本人 Win10 系统上,实验失败,只有换行才能成功。

3)-l,--log<LOG>:写入到指定日志文件。如果指定了-,日志会被输出到stdout。如果未指定或使用空字符串"",则不产生日志。 示例:

# 下载文件,并输出日志到当前控制台
aria2c -l - "http://pic16.nipic.com/20111006/6239936_092702973000_2.jpg"

4)-j,--max-concurrent-downloads=<N>:设置下载并发数。默认为 5。 示例:同时下载两个文件

# 文件 downUris.txt 记录要下载的两个文件 URL
http://pic16.nipic.com/20111006/6239936_092702973000_2.jpg 
http://pic39.nipic.com/20140321/18063302_210604412116_2.jpg 

# 进行下载,设置并发数为 2
aria2c -j 2 -i downUris.txt

5)-c,--continue [true|false]:断点续传。当前该选项只支持 HTTP(S)/FTP。

6)-h,--help[=<TAG>|<KEYWORD>]:查看帮助信息。帮助信息按标签进行分类。标签以#开头,aria2 提供的标签有:#basic#advanced#http#https#ftp#metalink#bittorrent#cookie#hook#file#rpc#checksum#experimental#deprecated#help#all。默认使用#basic标签。如果未指定标签,则打印出包含该参数名称的选项内容。 示例:

# 查询 http 标签选项
aria2c --help=#http
# 查询包含 http 名称的选项
aria2c --help=http
  • HTTP/FTP/SFTP 选项

1)-m,--max-tries=<N>:失败重试次数。默认值为:5。

2)--retry-wait=<SEC>:失败重试间隔时间(单位:秒),默认值为:0。

3)-o,--out=<FILE>:命名下载文件。下载文件默认名称为--dir最后的相对路径名,当使用--force-sequential时,该选项无效。

4)-x, --max-connection-per-server=<NUM>:设置每个下载最大的连接数。默认情况下,对一个下载,只有一个连接到服务器,可通过该选项增大连接数,以加快下载速度。 示例:

aria2c -x2 http://pic39.nipic.com/20140321/18063302_210604412116_2.jpg
  • HTTP 专有选项

1)--header=<HEADER>:设置请求头。 示例:

aria2c --header="X-A: b78" --header="X-B: 9J1" "http://host/file"

2)--save-cookie=<FILE>:保存 cookies 到文件中。

3)--load-cookies=<FILE>:加载 cookies。

  • 高级选项

1)--auto-file-renaming [true|false]:自动重命名已存在文件。当进行 HTTP(S)/FTP 下载时,如果存在同名文件,则新文件以 "文件名.{num}.后缀" 格式进行命名,num会自动递增,其范围为1..9999。该选项默认值为:true

2)--conf-path=<PATH>:指定配置文件。默认配置文件为:$HOME/.aria2/aria2.conf,如果不存在,则为:$XDG_CONFIG_HOME/aria2/aria2.conf

3)-D,--daemon [true|false]:设置以守护进程运行,此时当前工作目录会更改为/,且标准输入,标准输出和标准错误都会被重定向到/dev/null。该选项默认值为:false

4)--max-download-limit=<SPEED>:设置最大下载速度。0表示无限制。可以通过在数字后追加KM表示千字节或兆字节。该选项默认值为:0

5)-Z,--force-sequential [true|false]: 按命令行指定顺序下载多个文件,针对每个 URI 都会开启一个新的会话进行下载。 示例:下载两个文件

aria2c -Z http://pic16.nipic.com/20111006/6239936_092702973000_2.jpg http://pic39. nipic.com/20140321/18063302_210604412116_2.jpg

6)-P,--parameterized-uri [true|false]:支持参数化 URI。当要下载的多个文件 URI 存在一定关系或规律时,可通过该选项构建这种关系,比如:可以参数化下载块:http://{sv1,sv2,sv3}/foo.iso,同样,也可以指定数字序列加步进:http://host/image[000-100:2].img。如果所有的 URI 都不是指定同一个文件,则需要加上-Z选项。该选项默认值为:false

其余更多选项,请参考:options

配置文件

aria2 提供了很多的命令选项,但有些选项其实不经常变,对于这些选项的配置,aria2 提供了读取配置文件的功能--conf-path=<PATH>,我们可将这些不常更改,但是又想自定义的选项配置到一个默认配置文件中,然后以后每次启动 aria2 时,都读取该配置文件。

下面介绍下 aria2 配置文件环境搭建:

  1. D:\aria2 目录(目录自主决定)中,创建以下 3 个文件: aria2.log:日志文件 aria2.session:下载进度缓存 aria2.conf:配置文件
  2. 配置 aria2:打开 aria2.conf 文件,输入以下内容:
## 下载设置 ##
## ------------

# 断点续传
continue=true
# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=5
# 单个任务最大线程数, 添加时可指定, 默认:5
split=16
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=1M
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=16
# 断开速度过慢的连接
lowest-speed-limit=0
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
#max-overall-upload-limit=0
# 单个任务上传速度限制, 默认:0
#max-upload-limit=0
# 禁用IPv6, 默认:false
#disable-ipv6=true
# 当服务器返回503错误时, aria2会尝试重连
# 尝试重连次数, 0代表无限, 默认:5
max-tries=0
# 重连冷却, 默认:0
#retry-wait=0

## 进度保存相关 ##
##--------------------

# 从会话文件中读取下载任务
# 开启该参数后aria2将只接受session中的任务, 这意味着aria2一旦使用conf后将不再接受来自终端的任务, 所以该条只需要在启动rpc时加上就可以了
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=D:\aria2\aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=60
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false

## RPC相关设置 ##
##---------------

# 启用RPC, 默认:false(rpc 不启动则只能使用命令行下载)
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=kqueue
# RPC监听端口, 端口被占用时可以修改, 默认:6800
#rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
#rpc-secret=www.niuyoucai.org
# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-user=
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=

## BT/PT下载相关 ##
##------------------

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
#listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用, 默认:true
#enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=true
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=0
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true
# 强制加密, 防迅雷必备
#bt-require-crypto=true

## 磁盘相关 ##
##-------------

# 文件保存路径, 默认为当前启动位置
dir=F:/thunder
# 日志文件
log=D:\aria2\aria2.log
#另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?)
enable-mmap=true
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: 快none < trunc < falloc < prealloc慢
# falloc仅仅比trunc慢0.06s
# 磁盘碎片: 无falloc = prealloc < trunc = none有
# 推荐优先级: 高falloc --> prealloc --> trunc -->none低
# EXT4, btrfs, xfs, NTFS等新型文件系统建议使用falloc, falloc(fallocate)在这些文件系统上可以瞬间创建完整的空文件
# trunc(ftruncate) 同样是是瞬间创建文件, 但是与falloc的区别是创建出的空文件不占用实际磁盘空间
# prealloc 传统的创建完整的空文件, aria2会一直等待直到分配结束, 也就是说如果是在HHD上下载10G文件,那么你的aria2将会一直等待你的硬盘持续满载工作直到10G文件创建完成后才会开始下载
# none将不会预分配, 磁盘碎片程度受下面的disk-cache影响, trunc too
# 请勿在传统文件系统如:EXT3, FAT32上使用falloc, 它的实际效果将与prealloc相同
# MacOS建议使用prealloc, 因为它不支持falloc, 也不支持trunc, but可以尝试用brew安装truncate以支持trunc(ftruncate)
# 事实上我有些不能理解trunc在aria2中的角色, 它与none几乎没有区别, 也就是说:太鸡肋了
file-allocation=falloc
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
disk-cache=64M

其中:save-session/dir等选项自主选择配置,如果下载 BT 没速度,可以添加 BT Tracker 服务器,比如:

#BT下载 tracker
bt-tracker=udp://tracker.coppersurfer.tk:6969/announce,udp://tracker.leechers-paradise.org:6969/announce,udp://9.rarbg.to:2710/announce

更多配置选项,请参考:Aria2 Manual

到这里,我们就完成了 aria2 常用选项配置到配置文件中了,此时 aria2 就可以直接使用该配置文件进行下载了。

# 以配置文件启动下载,此时下载路径等均由配置文件配置
aria2c --conf-path="D:\aria2\aria2.conf" "http://pic16.nipic.com/20111006/6239936_092702973000_2.jpg" 

图形界面

因为 aria2 是命令行工具,不具备图形化界面,因此下载都是使用命令行操作。

命令行赋予了 aria2 更强大的操作,但是大多数时候我们都只需下载文件,并不需要其他复杂操作,此时命令行就稍显复杂了。

幸运的是,aria2 提供了 RPC模式,使我们可以远程与它进行交互(远程调用)。因此,很多的 aria2 图形界面客户端就应运而生。

这里介绍几个好用的 Web 客户端:

为了简单起见,我们这里直接使用在线网页 aria2c.com 进行简单介绍:

  1. 打开 aria2c.com 前,先开启 aria2 本地 RPC模式
aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all -c -D

或者直接使用我们上面的配置文件启动,因此在配置文件里面我们已配置启动 RPC模式

aria2c --conf-path=D:\aria2\aria2.conf -D
  1. 打开 aria2c.com,找到右上角设置,进行配置:

    img

    JSON-RPC

  2. 添加一个下载任务,点击执行,查看是否下载成功:

img

可以看到,我们已经成功下载了图片。

作者:Whyn 链接:https://www.jianshu.com/p/a8ddf16fabb2 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。