aria2一款轻量级多协议跨平台的命令行下载工具

aria2 - 超快下载工具

免责声明

本程序不提供任何担保。
您必须自行承担使用此程序的风险。

简介

aria2 是一款文件下载工具。支持的协议包括HTTP(S)、FTP、SFTP、BitTorrent 和 Metalink。aria2 可以从多个来源/协议下载文件,并尝试最大程度地利用您的下载带宽。它支持同时从HTTP(S)/FTP/SFTP 和 BitTorrent 下载文件,同时从 HTTP(S)/FTP/SFTP 下载的数据会上传到 BitTorrent集群。使用 Metalink 的块校验和,aria2 会在下载文件(例如 BitTorrent)时自动验证数据块。

项目页面位于https://aria2.github.io/。

功能

  • 命令行界面
  • 通过 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_proxyftp_proxyall_proxyno_proxy
  • 支持 HTTP gzip 和 deflate 内容编码
  • 使用 HTTPS 中指定的受信任 CA 证书验证对端
  • HTTPS 中的客户端证书身份验证
  • 支持分块传输编码
  • 从文件加载 Cookie使用 Firefox3 格式、Chromium/Google Chrome
    以及 Mozilla/Firefox
    (1.x/2.x)/Netscape 格式。
  • 以 Mozilla/Firefox (1.x/2.x)/Netscape 格式保存 Cookie。
  • 支持自定义 HTTP 标头
  • 支持持久连接
  • 通过 HTTP 代理进行 FTP/SFTP
  • 下载/上传速度限制
  • BitTorrent 扩展:快速扩展、DHT、PEX、MSE/PSE、
    多跟踪器、UDP 跟踪器
  • BitTorrent WEB-Seeding <http://getright.com/seedtorrent.html>_。
    aria2 请求的块大小大于片段大小,以减少请求
    开销。它还支持按片段大小进行流水线请求。
  • BitTorrent 本地对等点发现
  • 完全重命名/更改 BitTorrent 下载的目录结构
  • JSON-RPC(基于 HTTP 和 WebSocket)/XML-RPC 接口
  • 作为守护进程运行
  • 在多文件 torrent/Metalink 中选择性下载
  • 在 Metalink 中进行块校验和验证
  • 可在 Metalink 中禁用分段下载
  • Netrc 支持
  • 配置文件支持
  • 下载在文本文件或标准输入中找到的 URI,并可选择指定目标目录和输出文件名
  • 参数化 URI 支持
  • Happy Eyeballs 支持 IPv6
  • 磁盘缓存以减少磁盘占用

如何获取源代码

我们的源代码维护在 Github 上:
https://github.com/aria2/aria2

要获取最新的源代码,请运行以下命令:

shell 复制代码
$ git clone https://github.com/aria2/aria2.git

这将在您的当前目录中创建一个 aria2 目录,并将源文件
存储在那里。

依赖项

features dependency
HTTPS OSX or GnuTLS or OpenSSL or Windows
SFTP libssh2
BitTorrent None. Optional: libnettle+libgmp or libgcrypt
or OpenSSL (see note)
Metalink libxml2 or Expat.
Checksum None. Optional: OSX or libnettle or libgcrypt
or OpenSSL or Windows (see note)
gzip, deflate in HTTP zlib
Async DNS C-Ares
Firefox3/Chromium cookie libsqlite3
XML-RPC libxml2 or Expat.
JSON-RPC over WebSocket libnettle or libgcrypt or OpenSSL

.. 注意::

如果同时安装了两个库,libxml2 的优先级高于 Expat。如果您更喜欢 Expat,请在 configure 中使用“--without-libxml2”参数。

.. 注意::

在 Apple OSX 上,系统级 SSL/TLS 支持将是首选。因此,该平台上不需要 GnuTLS 或 OpenSSL。如果您想要禁用此行为,请在 configure 中使用“--without-appletls”参数。

如果同时安装了两个库,GnuTLS 的优先级高于 OpenSSL。如果您更喜欢 OpenSSL,请在 configure 中使用“--without-gnutls”和“--with-openssl”参数。

在 Windows 上,有基于 Windows 原生 SSL 功能 (Schannel) 的 SSL 实现可用,因此,该平台不需要 GnuTLS 或 OpenSSL。如果您想要禁用此行为,请在 configure 中使用“--without-wintls”参数。

.. 注意::

在 Apple OSX 上,除非 aria2 配置了“--without-appletls”,否则将优先使用操作系统级别的校验和支持。

如果两个库都安装了,libnettle 的优先级高于 libgcrypt。

如果您更喜欢 libgcrypt,请使用“--without-libnettle --with-libgcrypt”运行 configure。如果选择 OpenSSL 而不是 GnuTLS,则不会使用 libnettle 和 libgcrypt。

如果没有安装任何可选依赖项,则将使用仅支持 md5 和 sha1 的内部实现。

在 Windows 上,有基于 Windows 原生功能的 SSL 实现可用,
并且将优先使用,除非 aria2 配置了“--without-wintls”。

用户可以为 SSL 和加密库选择以下配置之一:

  • OpenSSL
  • GnuTLS + libgcrypt
  • GnuTLS + libnettle
  • Apple TLS (OSX only)
  • Windows TLS (Windows only)

您可以通过在 configure 脚本中分别提供 --disable-bittorrent--disable-metalink 来禁用 BitTorrent 和 Metalink 支持。

要启用异步 DNS 支持,您需要 c-ares。

如何构建

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(HTTP 中 gzip、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
  • autoconf
  • automake
  • autotools-dev
  • autopoint
  • libtool

并运行以下命令生成 configure 脚本和其他构建程序所需的文件:

language 复制代码
$ autoreconf -i

此外,您还需要 Sphinx <http://sphinx-doc.org/>_ 来构建手册页。

如果您正在为 Mac OS X 构建 aria2,请查看
makerelease-osx.mk GNU Make 文件。

构建 aria2 的最快方法是首先运行 configure 脚本:

language 复制代码
$ ./configure

要构建静态链接的 aria2,请使用 ARIA2_STATIC=yes
命令行选项:

language 复制代码
$ ./configure ARIA2_STATIC=yes

配置完成后,运行 make 来编译程序:

language 复制代码
$ make

请参阅交叉编译 Windows 二进制文件以创建 Windows 二进制文件。请参阅交叉编译 Android 二进制文件以创建 Android 二进制文件。

configure 脚本会检查可用的库,并启用尽可能多的功能(默认未启用的实验性功能除外)。

从 1.1.0 版本开始,aria2 默认检查 HTTPS 服务器的证书。如果您使用 OpenSSL 或最新版本的 GnuTLS(包含 gnutls_certificate_set_x509_system_trust() 函数)进行构建,并且库已正确配置以定位系统级 CA 证书存储,则 aria2 将在启动时自动加载这些证书。如果不是这种情况,我建议提供 CA 包文件的路径。例如,在 Debian 中,CA 包文件的路径为“/etc/ssl/certs/ca-certificates.crt”(在 ca-certificates 包中)。这可能会因您的发行版而异。您可以使用 --with-ca-bundle 选项将其提供给 configure 脚本:

language 复制代码
$ ./configure --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt'
$ make

如果没有 --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 进行自动化单元测试。运行单元测试:

language 复制代码
$ make check

交叉编译 Windows 二进制文件

本节将介绍如何在 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-ares
  • expat
  • sqlite3
  • zlib
  • libssh2
  • cppunit

可以调整一些环境变量来更改构建设置:

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 位二进制文​​件,请执行以下操作:

language 复制代码
$ HOST=x86_64-w64-mingw32 ./mingw-config

如果您需要使用 --enable-libaria2 的 libaria2 dll,则不要使用ARIA2_STATIC=yes,并准备外部库的 DLL 版本。

交叉编译 Android 二进制文件

在本节中,我们将介绍如何在 Debian Linux 上使用 Android NDK 交叉编译器构建 Android 二进制文件。

在撰写本文时,Android NDK r21e 应该可以编译 aria2,并且不会出现错误。

android-config 脚本是 Android 构建的配置脚本包装器。我们使用它来创建官方的 Android 构建。此脚本假设已构建以下用于交叉编译的库:

  • c-ares
  • openssl
  • expat
  • zlib
  • 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 来编译源代码。

BitTorrent

关于文件名,下载文件的文件名确定如下:

单文件模式

如果 .torrent 文件中存在“name”键,则文件名为“name”键的值。否则,文件名为 .torrent 文件的基本名称加上“.file”。例如,.torrent 文件的名称为“test.torrent”,则文件名为“test.torrent.file”。下载文件的存储目录可以通过 -d 选项指定。

多文件模式

.torrent 文件中提到的完整目录/文件结构已创建。下载文件的顶层目录可以通过 -d 选项指定。

下载开始前,如有需要,会创建一个完整的目录结构。默认情况下,aria2 最多打开 .torrent 文件中提到的 100 个文件,并直接写入和读取这些文件。同时打开的文件数量可以通过 --bt-max-open-files 选项控制。

DHT

aria2 支持兼容主流的 DHT。默认情况下,IPv4 DHT 的路由表保存在“XDGCACHEHOME/aria2/dht.dat”中,IPv6DHT的路由表保存在“XDG_CACHE_HOME/aria2/dht.dat”中,IPv6 DHT 的路由表保存在“XDG_CACHE_HOME/aria2/dht6.dat”中,非“HOME/.aria2/dht.dat”或“HOME/.aria2/dht.dat”或“HOME/.aria2/dht6.dat”中存在文件。aria2 使用相同的端口号来监听 IPv4 和 IPv6 DHT。

UDP 跟踪器

启用 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 中,metalink:metaurl 元素中可能出现多文件种子文件。由于 aria2 无法同时下载两个相同的种子文件,因此 aria2 会将具有相同 BitTorrent metaurl 的文件分组到 metalink:file 元素中,并从单个 BitTorrent 集群中下载它们。这基本上是一个带有文件选择的多文件种子下载,因此也会创建不在 Metalink 文档中但与所选文件共享同一片段的相邻文件。

如果在 metalink:url 或 metalink:metaurl 元素中指定了相对 URI,aria2 会使用 Metalink 文件的 URI 作为基准 URI 来解析相对 URI。如果在从本地磁盘读取的 Metalink 文件中找到相对 URI,aria2 会使用 --metalink-base-uri 选项的值作为基准 URI。如果未指定此选项,则相对 URI 将被忽略。

Metalink/HTTP

当前实现仅使用 rel=duplicate 链接。aria2 理解摘要标头字段,并检查其是否与其他来源的摘要值匹配。如果不同,则断开连接。下载完成后,aria2 还会使用此摘要值执行校验和验证。aria2 可以识别地理位置值。要告诉 aria2 您首选哪个位置,可以使用 --metalink-location 选项。

netrc

HTTP(S)/FTP/SFTP 默认启用 netrc 支持。如需禁用 netrc 支持,请指定 -n 命令行选项。您的 .netrc 文件应具有正确的权限 (600)。

WebSocket

aria2 中嵌入的 WebSocket 服务器实现了 RFC 6455 中定义的规范,支持的协议版本为 13。

libaria2

libaria2 是一个 C++ 库,为客户端代码提供 aria2 功能。目前,libaria2 默认不构建。要启用 libaria2,请使用 --enable-libaria2 配置选项。默认情况下,仅构建共享库。要构建静态库,也请使用 --enable-static 配置选项。请参阅 libaria2 文档,了解如何使用 API。

关于项目

aria2 是一款轻量级、多协议、多源、跨平台的命令行下载工具。它支持 HTTP/HTTPS、FTP、SFTP、BitTorrent 和 Metalink。
GPL-2.0
C++
38,922
3758
742
2010-11-27
2025-08-18

增长趋势 - stars