该程序不提供任何保证。您必须自行承担使用该程序的风险。
aria2 是一个用于下载文件的实用程序。支持的协议包括 HTTP(S)、FTP、SFTP、BitTorrent 和 Metalink。 aria2 可以从多个源/协议下载文件,并尝试利用您的最大下载带宽。它支持同时从HTTP(S)/FTP/SFTP和BitTorrent下载文件,同时从HTTP(S)/FTP/SFTP下载的数据上传到BitTorrent swarm。使用 Metalink 的块校验和,aria2 在下载 BitTorrent 等文件时自动验证数据块。
项目页面位于https://aria2.github.io/。
请参阅 aria2 在线手册(俄语翻译、葡萄牙语翻译)以了解如何使用 aria2。
以下是功能列表:
命令行界面
通过 HTTP(S)/FTP/SFTP/BitTorrent 下载文件
分段下载
Metalink 版本 4 (RFC 5854) 支持(HTTP/FTP/SFTP/BitTorrent)
Metalink 3.0 版支持(HTTP/FTP/SFTP/BitTorrent)
Metalink/HTTP (RFC 6249) 支持
HTTP/1.1 实现
HTTP 代理支持
HTTP BASIC 身份验证支持
HTTP 代理身份验证支持
众所周知的代理环境变量: http_proxy
、 https_proxy
、 ftp_proxy
、 all_proxy
和no_proxy
HTTP gzip、deflate 内容编码支持
使用 HTTPS 中给定的受信任 CA 证书验证对等方
HTTPS 中的客户端证书身份验证
分块传输编码支持
使用 Firefox3 格式、Chromium/Google Chrome 和 Mozilla/Firefox (1.x/2.x)/Netscape 格式从文件加载 Cookie。
以 Mozilla/Firefox (1.x/2.x)/Netscape 格式保存 Cookie。
自定义 HTTP 标头支持
持久连接支持
通过 HTTP 代理的 FTP/SFTP
下载/上传速度限制
BitTorrent 扩展:快速扩展、DHT、PEX、MSE/PSE、多跟踪器、UDP 跟踪器
BitTorrent 网络播种。 aria2 请求的块大小大于片段大小,以减少请求开销。它还支持具有片段大小的管道请求。
BitTorrent 本地对等发现
完全重命名/更改 BitTorrent 下载的目录结构
JSON-RPC(通过 HTTP 和 WebSocket)/XML-RPC 接口
作为守护进程运行
在多文件 torrent/Metalink 中选择性下载
Metalink 中的块校验和验证
可以在Metalink中禁用分段下载
网络资源库支持
配置文件支持
下载在文本文件或标准输入中找到的 URI,并且可以选择指定目标目录和输出文件名
参数化 URI 支持
Happy Eyeballs 支持 IPv6
磁盘缓存以减少磁盘活动
我们对 aria2 版本使用 3 个数字:MAJOR.MINOR.PATCH。 我们将在每月 15 日发布次要更新。 如果自上次版本以来没有发生任何更改,我们可能会跳过某个版本。 对于翻译团队来说,功能和文档冻结发生在发布日(每月 5 日)前 10 天。 我们将在当天左右提出有关即将发布的版本的问题。
如果存在安全问题,我们可能会在常规版本之间发布补丁版本。
MAJOR版本暂时保持为1。
我们在 Github 上维护源代码:https://github.com/aria2/aria2
要获取最新的源代码,请运行以下命令:
$ git 克隆 https://github.com/aria2/aria2.git
这将在您的当前目录中创建一个 aria2 目录,并将源文件存储在此处。
特征 | 依赖性 |
---|---|
HTTPS | OSX 或 GnuTLS 或 OpenSSL 或 Windows |
SFTP | libssh2 |
BT | 没有任何。可选:libnettle+libgmp 或 libgcrypt 或 OpenSSL(参见注释) |
梅塔林克 | libxml2 或 Expat。 |
校验和 | 没有任何。可选:OSX 或 libnettle 或 libgcrypt 或 OpenSSL 或 Windows(请参阅注释) |
gzip、HTTP 中的 deflate | 兹库 |
异步DNS | C-战神 |
Firefox3/Chromium cookie | libsqlite3 |
XML-RPC | libxml2 或 Expat。 |
基于 WebSocket 的 JSON-RPC | libnettle 或 libgcrypt 或 OpenSSL |
笔记
如果安装了两个库,libxml2 优先于 Expat。如果您更喜欢 Expat,请使用--without-libxml2
运行配置。
笔记
在 Apple OSX 上,操作系统级 SSL/TLS 支持将是首选。因此,该平台上不需要 GnuTLS 或 OpenSSL。如果您想禁用此行为,请使用--without-appletls
运行配置。
如果安装了两个库,GnuTLS 优先于 OpenSSL。如果您更喜欢 OpenSSL,请使用--without-gnutls
--with-openssl
运行配置。
在 Windows 上,有基于本机 Windows SSL 功能 (Schannel) 的可用 SSL 实现,并且它将是首选。 因此,该平台上不需要 GnuTLS 或 OpenSSL。 如果您想禁用此行为,请使用--without-wintls
运行配置。
笔记
在 Apple OSX 上,操作系统级校验和支持将是首选,除非 aria2 配置为--without-appletls
。
如果安装了两个库,libnttle 的优先级高于 libgcrypt。 如果您更喜欢 libgcrypt,请使用--without-libnettle --with-libgcrypt
运行配置。如果选择 OpenSSL 而不是 GnuTLS,则 libnettle 和 libgcrypt 都不会被使用。
如果未安装任何可选依赖项,则将使用仅支持 md5 和 sha1 的内部实现。
在 Windows 上,有基于本机 Windows 功能的 SSL 实现可用,并且它将是首选,除非 aria2 配置为--without-wintls
。
用户可以对 SSL 和加密库进行以下配置之一:
开放式SSL
GnuTLS + libgcrypt
GnuTLS + libnettle
Apple TLS(仅限 OSX)
Windows TLS(仅限 Windows)
您可以通过分别向配置脚本提供--disable-bittorrent
和--disable-metalink
来禁用 BitTorrent 和 Metalink 支持。
要启用异步 DNS 支持,您需要 c-ares。
c-ares:http://c-ares.haxx.se/
aria2 主要用 C++ 编写。最初,它是基于C++98/C++03标准特性编写的。我们现在正在将 aria2 迁移到 C++11 标准。当前源代码需要支持 C++11 的编译器。对于众所周知的编译器,例如 g++ 和 clang,必须支持-std=c++11
或-std=c++0x
标志。
要从源码包构建 aria2,您需要以下开发包(包名称可能会根据您使用的发行版而有所不同):
libgnutls-dev(HTTPS、BitTorrent、校验和支持所需)
nettle-dev(BitTorrent、校验和支持所需)
libgmp-dev(BitTorrent 必需)
libssh2-1-dev(SFTP 支持所需)
libc-ares-dev(异步 DNS 支持所需)
libxml2-dev(Metalink 支持所需)
zlib1g-dev(gzip、HTTP 中的 deflate 解码支持必需)
libsqlite3-dev(Firefox3/Chromium cookie 支持所需)
pkg-config(检测已安装的库所需)
您可以使用 libgcrypt-dev 代替 nettle-dev 和 libgmp-dev:
libgpg-error-dev(BitTorrent、校验和支持所需)
libgcrypt-dev(BitTorrent、校验和支持所需)
您可以使用 libssl-dev 代替 libgnutls-dev、nettle-dev、libgmp-dev、libgpg-error-dev 和 libgcrypt-dev:
libssl-dev(HTTPS、BitTorrent、校验和支持所需)
您可以使用 libexpat1-dev 代替 libxml2-dev:
libexpat1-dev(Metalink 支持所需)
在 Fedora 上,您需要以下软件包:gcc、gcc-c++、kernel-devel、libgcrypt-devel、libxml2-devel、openssl-devel、gettext-devel、cppunit
如果您从 git 存储库下载了源代码,则必须安装以下软件包才能获取 autoconf 宏:
libxml2-dev
libcppunit-dev
自动配置
汽车制造商
自动工具开发
自动点
库工具
并运行以下命令生成配置脚本和构建程序所需的其他文件:
$ autoreconf -i
此外,您还需要 Sphinx 来构建手册页。
如果您正在为 Mac OS X 构建 aria2,请查看 makerelease-osx.mk GNU Make makefile。
构建 aria2 的最快方法是首先运行配置脚本:
$ ./配置
要构建静态链接的 aria2,请使用ARIA2_STATIC=yes
命令行选项:
$ ./配置 ARIA2_STATIC=yes
配置完成后,运行make
编译程序:
$ 制作
请参阅交叉编译 Windows 二进制文件以创建 Windows 二进制文件。请参阅交叉编译 Android 二进制文件以创建 Android 二进制文件。
配置脚本检查可用的库并启用尽可能多的功能,默认情况下未启用的实验性功能除外。
从1.1.0开始,aria2默认检查HTTPS服务器的证书。如果您使用 OpenSSL 或具有gnutls_certificate_set_x509_system_trust()
函数的最新版本的 GnuTLS 进行构建,并且该库已正确配置为定位系统范围的 CA 证书存储,则 aria2 将在启动时自动加载这些证书。如果不是这种情况,我建议提供 CA 捆绑文件的路径。例如,在 Debian 中,CA 捆绑文件的路径是“/etc/ssl/certs/ca-certificates.crt”(在 ca-certificates 包中)。这可能会因您的发行版而异。您可以使用--with-ca-bundle option
让它配置脚本:
$ ./configure --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt' $ 制作
如果没有--with-ca-bundle
选项,您在访问 HTTPS 服务器时将会遇到错误,因为没有 CA 捆绑包就无法验证证书。在这种情况下,您可以使用 aria2 的--ca-certificate
选项指定 CA 捆绑文件。 如果您没有安装 CA 捆绑包文件,那么最后的办法是使用--check-certificate=false
禁用证书验证。
使用本机 OSX (AppleTLS) 和/或 Windows (WinTLS) 实现将自动使用系统证书存储,因此--with-ca-bundle
不是必需的,并且在使用这些实现时将被忽略。
默认情况下,名为aria2c
的 bash_completion 文件安装到目录$prefix/share/doc/aria2/bash_completion
。 要更改文件的安装目录,请使用--with-bashcompletiondir
选项。
make
后,可执行文件位于src/aria2c
。
aria2 使用 CppUnit 进行自动化单元测试。要运行单元测试:
$ 进行检查
在本节中,我们将描述如何在 Debian Linux 上使用 mingw-w64 (http://mingw-w64.org/doku.php) 交叉编译器构建 Windows 二进制文件。 MinGW (http://www.mingw.org/) 可能无法构建 aria2。
构建 Windows 二进制文件的最简单方法是使用 Dockerfile.mingw。 请参阅 Dockerfile.mingw 如何构建二进制文件。 如果您无法使用 Dockerfile,请继续阅读以下段落。
基本上,在编译和安装依赖库后,您只需传递适当的--host
选项并指定要配置的CPPFLAGS
、 LDFLAGS
和PKG_CONFIG_LIBDIR
变量即可进行交叉编译。为了方便起见并降低我们自己的开发成本,我们提供了一种更简单的方法来配置构建设置。
mingw-config
脚本是 mingw-w64 的配置脚本包装器。我们用它来创建官方 Windows 版本。 该脚本假设已构建以下库用于交叉编译:
c-战神
外籍人士
sqlite3
兹库
libssh2
单元
可以调整一些环境变量来更改构建设置:
HOST
交叉编译以构建在HOST
上运行的程序。它默认为i686-w64-mingw32
。要构建 64 位二进制文件,请指定x86_64-w64-mingw32
。
PREFIX
安装依赖库的目录的前缀。 它默认为/usr/local/$HOST
。 -I$PREFIX/include
将被添加到CPPFLAGS
中。 -L$PREFIX/lib
将被添加到LDFLAGS
中。 $PREFIX/lib/pkgconfig
将设置为PKG_CONFIG_LIBDIR
。
例如,要构建 64 位二进制文件,请执行以下操作:
$ HOST=x86_64-w64-mingw32 ./mingw-config
如果您想要使用--enable-libaria2
的 libaria2 dll,则不要使用ARIA2_STATIC=yes
并准备外部库的 DLL 版本。
在本节中,我们将介绍如何在 Debian Linux 上使用 Android NDK 交叉编译器构建 Android 二进制文件。
在撰写本文时,Android NDK r21e 应该可以正确编译 aria2。
android-config
脚本是 Android 构建的配置脚本包装器。 我们用它来创建官方 Android 版本。 该脚本假设已构建以下库用于交叉编译:
c-战神
开放式SSL
外籍人士
兹库
libssh2
构建上述库时,请确保禁用共享库并仅启用静态库。我们将静态链接这些库。
android-config
假定定义了$ANDROID_HOME
和$NDK
环境变量。
我们目前使用 Android NDK r21e。 $NDK
应指向 Android NDK 的目录。 构建工具位于$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/
下。
所有依赖库必须安装在$ANDROID_HOME/usr/local
下。
在android-config
之后,运行make
来编译源代码。
Sphinx 用于构建文档。如果 aria2 手册页不是最新的,则当您运行make
时将构建它们。 您还可以通过make html
构建 aria2 手册页的 HTML 版本。 HTML 版本的手册也可在线获取(俄语翻译、葡萄牙语翻译)。
下载文件的文件名确定如下:
单文件模式
如果 .torrent 文件中存在“name”键,则文件名是“name”键的值。否则,文件名是 .torrent 文件的基本名称并附加“.file”。例如,.torrent 文件是“test.torrent”,则文件名是“test.torrent.file”。 可以通过-d选项指定存储下载文件的目录。
多文件模式
.torrent 文件中提到的完整目录/文件结构已创建。 可以通过-d选项指定存放下载文件的顶层目录的目录。
在下载开始之前,如果需要,会创建完整的目录结构。默认情况下,aria2 最多打开 .torrent 文件中提到的 100 个文件,并直接写入和读取这些文件。同时打开的文件数量可以通过--bt-max-open-files
选项控制。
aria2 支持主线兼容的 DHT。默认情况下,IPv4 DHT 的路由表保存到$XDG_CACHE_HOME/aria2/dht.dat
,IPv6 DHT 的路由表保存到$XDG_CACHE_HOME/aria2/dht6.dat
除非$HOME/.aria2/dht.dat
或$HOME/.aria2/dht6.dat
。 aria2 使用相同的端口号来侦听 IPv4 和 IPv6 DHT。
启用 IPv4 DHT 时会启用 UDP 跟踪器支持。 UDP跟踪器的端口号与DHT共享。使用--dht-listen-port
选项更改端口号。
-o
选项用于更改 .torrent 文件本身的文件名,而不是更改 .torrent 文件中文件的文件名。为此,请改用--index-out
选项。
aria2 默认使用的 TCP 和 UDP 端口号为 6881-6999。
aria2 不会自动配置端口转发。请手动配置您的路由器或防火墙。
对等点的最大数量为 55。当下载速率较低时,可能会超出此限制。可以使用--bt-request-peer-speed-limit
选项调整此下载速率。
从版本 0.10.0 开始,aria2 在选择性下载完成后停止发送请求消息。
当前实现支持 HTTP(S)/FTP/SFTP/BitTorrent。 其他 P2P 协议将被忽略。支持 Metalink4 (RFC 5854) 和 Metalink 3.0 版文档。
对于校验和验证,支持 md5、sha-1、sha-224、sha-256、sha-384 和 sha-512。如果提供多种哈希算法,aria2 将使用更强的一种。如果整个文件校验和验证失败,aria2 不会重试下载,只是以非零返回代码退出。
支持的用户首选项包括版本、语言、位置、协议和操作系统。
如果 Metalink 文件中提供了块校验和,则 aria2 在下载过程中会自动验证数据块。可以通过命令行选项关闭此行为。
如果 Metalink 文件中包含签名,则 aria2 在下载完成后会将其保存为文件。 文件名是下载文件名+“.sig”。如果相同的文件已存在,则不保存签名文件。
在Metalink4中,多文件torrent可以出现在metalink:metaurl元素中。 由于 aria2 无法同时下载 2 个相同的 torrent,因此 aria2 将文件分组到具有相同 BitTorrent metaurl 的 metalink:file 元素中,并从单个 BitTorrent 群下载它们。这基本上是一个带有文件选择的多文件 torrent 下载,因此也会创建不在 Metalink 文档中但与所选文件共享同一块的相邻文件。
如果在metalink:url或metalink:metaurl元素中指定了相对URI,则aria2使用Metalink文件的URI作为基本URI来解析相对URI。如果在从本地磁盘读取的 Metalink 文件中找到相对 URI,则 aria2 使用--metalink-base-uri
选项的值作为基本 URI。如果未指定此选项,则相对 URI 将被忽略。
当前的实现仅使用 rel=duplicate 链接。 aria2 理解摘要标头字段并检查它是否与其他来源的摘要值匹配。如果不同,则断开连接。下载完成后,aria2 还使用此摘要值来执行校验和验证。 aria2 识别地理价值。要告诉 aria2 您喜欢哪个位置,您可以使用--metalink-location
选项。
默认情况下为 HTTP(S)/FTP/SFTP 启用 netrc 支持。 要禁用 netrc 支持,请指定 -n 命令行选项。 您的 .netrc 文件应该具有正确的权限(600)。
aria2 中嵌入的 WebSocket 服务器实现了 RFC 6455 中定义的规范。支持的协议版本为 13。
libaria2 是一个 C++ 库,为客户端代码提供 aria2 功能。目前,libaria2 不是默认构建的。要启用 libaria2,请使用--enable-libaria2
配置选项。 默认情况下,仅构建共享库。要构建静态库,还可以使用--enable-static
配置选项。请参阅 libaria2 文档以了解如何使用 API。
aria2 在线手册
https://aria2.github.io/
RFC 959 文件传输协议 (FTP)
RFC 1738 统一资源定位符 (URL)
RFC 2428 IPv6 和 NAT 的 FTP 扩展
RFC 2616 超文本传输协议——HTTP/1.1
RFC 3659 FTP 扩展
RFC 3986 统一资源标识符 (URI):通用语法
RFC 4038 IPv6 过渡的应用方面
RFC 5854 Metalink 下载描述格式
RFC 6249 Metalink/HTTP:镜像和哈希
RFC 6265 HTTP 状态管理机制
RFC 6266 超文本传输协议 (HTTP) 中内容处置标头字段的使用
RFC 6455 WebSocket 协议
RFC 6555 快乐眼球:双栈主机的成功
BitTorrent 协议规范
BitTorrent:DHT 协议
BitTorrent:快速扩展
BitTorrent:IPv6 跟踪器扩展
BitTorrent:对等方发送元数据文件的扩展
BitTorrent:扩展协议
BitTorrent:多跟踪器元数据扩展
BitTorrent:BitTorrent 的 UDP 跟踪器协议和 BitTorrent udp 跟踪器协议规范。
BitTorrent:WebSeed - HTTP/FTP 播种(GetRight 风格)
BitTorrent:私人种子
BitTorrent:适用于 IPv6 的 BitTorrent DHT 扩展
BitTorrent:消息流加密
Kademlia:基于 XOR 度量的点对点信息系统