Closed dabao1955 closed 1 year ago
以下是它们在下载方面的区别
属性 | curl | aria2 |
---|---|---|
协议 | HTTP(S)、FTP、SFTP、SCP、TELNET、LDAP等 | HTTP(S)、FTP、BitTorrent、Metalink等 |
处理速度 | 适用于小文件下载和快速测试,对于大文件和较慢的网络连接可能会出现性能瓶颈 | 可以利用多线程并发来提高下载速度,对于大文件和较慢的网络连接有明显的优势 |
看起来似乎是 aria2 更强。 实际上,这是由于它们的侧重点不同。
aria2 更侧重于下载, 而 curl 更侧重于 http 请求(在命令行中方便地进行各种操作,如上传文件、发送 POST 请求等)。
比如说用指定的 Header 来发送一个 GET 请求:
curl -H "Accept: application/vnd.github.v3+json" -X GET https://api.github.com/users/dabao1955
总结一下:用 curl 调 api 可能更方便,用 aria2 下载文件可能更快,每个工具擅长的地方不一样。
话说回来,当前版本基本上都是下载文件,这种事情完全交给 aria2 也行啊!
很久之前,有个发行版的 aria2 (x86) 出问题了,所以就把 curl 当备胎 (fallback)。
再加上, curl
是很多发行版预装的软件包,依赖它也不会有太大的问题。
之后的新版,可能既不会有 aria2 也不会有 curl。 也有可能把它们其中一个当作 fallback 来用。
题外话:
编写多线程下载单文件的程序,其实挺麻烦的。
之前尝试用 rust 写过一个,根据 Content-Length
把文件分成多块,然后多线程下载。
结果发现真的比单线程麻烦不少。
以下是它们在下载方面的区别
属性 curl aria2 协议 HTTP(S)、FTP、SFTP、SCP、TELNET、LDAP等 HTTP(S)、FTP、BitTorrent、Metalink等 处理速度 适用于小文件下载和快速测试,对于大文件和较慢的网络连接可能会出现性能瓶颈 可以利用多线程并发来提高下载速度,对于大文件和较慢的网络连接有明显的优势 看起来似乎是 aria2 更强。 实际上,这是由于它们的侧重点不同。
aria2 更侧重于下载, 而 curl 更侧重于 http 请求(在命令行中方便地进行各种操作,如上传文件、发送 POST 请求等)。
比如说用指定的 Header 来发送一个 GET 请求:
curl -H "Accept: application/vnd.github.v3+json" -X GET https://api.github.com/users/dabao1955
总结一下:用 curl 调 api 可能更方便,用 aria2 下载文件可能更快,每个工具擅长的地方不一样。
话说回来,当前版本基本上都是下载文件,这种事情完全交给 aria2 也行啊! 很久之前,有个发行版的 aria2 (x86) 出问题了,所以就把 curl 当备胎 (fallback)。 再加上,
curl
是很多发行版预装的软件包,依赖它也不会有太大的问题。之后的新版,可能既不会有 aria2 也不会有 curl。 也有可能把它们其中一个当作 fallback 来用。
题外话: 编写多线程下载单文件的程序,其实挺麻烦的。 之前尝试用 rust 写过一个,根据
Content-Length
把文件分成多块,然后多线程下载。 结果发现真的比单线程麻烦不少。
貌似alpine不会预装curl(非杠)?而且大部分linux发行版不是预装aria2而是wget
android 的 termux 预装了 curl (尽管它不算是 linux 发行版), debian 基础容器的话既没有预装 wget
, 也没有 curl
。
fedora 和 arch 都是预装了 curl
,连标准容器里面都有(最小容器镜像的话就不清楚了)。
之前还有条新闻是 fedora 要用最小的 curl 包,而不是完整包,我印象很深刻。
我觉得问题已经变成了wget
和 curl
哪个预装量更大了。
抱歉,这个问题,我也不是很清楚。
除了某些路由器固件和给NAS 用的系统外,我基本上没见过其他类型的 linux 发行版, 会去预装 aria2 的。 嵌入式设备的系统或者是超精简系统,里面可能会有 buysbox, 而 busybox 可能会自带 wget。(尽管有些嵌入式系统带了 wget, 但可能没有带 ca 证书,这个东西对于 https 连接来说至关重要)。
所以说,的确有挺多系统预装 wget 的。 不过,GNU 的 wget2 就挺少见的。
说到 wget 和 curl, 就不得不提一件有趣的事情!
在很久之前,windows 的 powershell 里面“自带”了 wget 和 curl 命令。
结果人们发现,这不是真正的 wget 和 curl, 而只是 alias, 实际调用的是 Invoke-WebRequest
(如果我记得没错的话,应该就是 iwr)。
后来呢,据说是 curl 的作者(我不清楚是不是他)跟微软反馈,让他们用真正的 curl 。 于是,从某个版本的 windows10 开始,预装了真正的 curl.exe ,而不是继续用假的 alias 。 现在的 win11 应该也有,有时间的话可以去试一下。
要是只下载图片字体软件包啥的我觉得用busybox自带的wget也许会更好一些?
要是只下载图片字体软件包啥的我觉得用busybox自带的wget也许会更好一些?
root@localhost:~# wget ftp://192.168.0.105:2121/1.flac
--2023-03-20 23:54:54-- ftp://192.168.0.105:2121/1.flac => '1.flac.1'
Connecting to 192.168.0.105:2121... connected. Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done. ==> TYPE I ... done. ==> CWD not needed.
==> SIZE 1.flac ... 24167364 ==> PASV ... done. ==> RETR 1.flac ... done.
Length: 24167364 (23M) (unauthoritative)
1.flac.1 4%[> ] 999.74K 233KB/s eta 97s ^C
root@localhost:~# curl -LO ftp://192.168.0.105:2121/1.flac % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed 6 23.0M 6 1426k 0 0 221k 0 0:01:46 0:00:06 0:01:40 225k^C
root@localhost:~# aria2c ftp://192.168.0.105:2121/1.flac
03/20 23:55:24 [NOTICE] Downloading 1 item(s)
03/20 23:55:25 [NOTICE] File already exists. Renamed to /root/1.1.flac. [#34b19e 736KiB/23MiB(3%) CN:1 DL:190KiB ETA:2m]
貌似aria2,wget,curl只是用默认参数下载速度都差不多
除了某些路由器固件和给NAS 用的系统外,我基本上没见过其他类型的 linux 发行版, 会去预装 aria2 的。 嵌入式设备的系统或者是超精简系统,里面可能会有 buysbox, 而 busybox 可能会自带 wget。(尽管有些嵌入式系统带了 wget, 但可能没有带 ca 证书,这个东西对于 https 连接来说至关重要)。
所以说,的确有挺多系统预装 wget 的。 不过,GNU 的 wget2 就挺少见的。
~ $ wget2 ftp://192.168.0.105:2121/1.flac Failed to parse URI 'ftp://192.168.0.105:2121/1.flac' Nothing to do - goodbye ~ $ w3m https://www.h-college.com/ Can't open history ~ $ wget2 https://d2.tapurl.com/latest/auto_iem_exch-resource_m62tupkd_18782_id42949?n= [0] Downloading 'https://d2.tapurl.com/latest/auto_iem_exch-resource_m62tupkd_18782_id42949?n=' ... HTTP response 302 [https://d2.tapurl.com/latest/auto_iem_exch-resource_m62tupkd_18782_id42949?n=] Adding URL: https://rls.tapimg.com/pub2/202303/6ab33129a68124f4407db44c0b3707bd [0] Downloading 'https://rls.tapimg.com/pub2/202303/6ab33129a68124f4407db44c0b3707bd' ... Saving 'auto_iem_exch-resource_m62tupkd_18782_id42949?n=' HTTP response 200 [https://rls.tapimg.com/pub2/202303/6ab33129a68124f4407db44c0b3707bd] wget2在只使用默认配置下既不能下载ftp上的文件也不显示进度条和剩余时间
url="https://mirrors.bfsu.edu.cn/github-release/googlefonts/noto-cjk/LatestRelease/03_NotoSansCJK-OTC.zip"
aria2c -s5 -x5 -k1m $url
wget2 --progress bar $url
多线程下载并不一定会更快。 如果文件不够大,或者是源网站没有对单个线程进行限速,那么你可能无法体会到它与单线程之间的差距。 使用默认参数时,默认是单线程。
多线程甚至有可能会更慢。 当然,我这里并不是说线程池的开销。 而是因为你开了太多线程,会被源服务器检测到,然后被限制了。
额外补充内容: 在 n 年前,有个网盘运营商,对用户下载的网速进行了限制。开多线程能轻松绕开限制,现在的话不行。
要是只下载图片字体软件包啥的我觉得用busybox自带的wget也许会更好一些?
还有 1 G 多的容器镜像
~ $ url="https://mirrors.bfsu.edu.cn/github-release/googlefonts/noto-cjk/LatestRelease/03_NotoSansCJK-OTC.zip" ~ $ ~ $ aria2c -s5 -x5 -k1m $url
03/21 09:13:59 [NOTICE] Downloading 1 item(s) [#e065f1 96MiB/99MiB(97%) CN:3 DL:16MiB] 03/21 09:14:06 [NOTICE] Download complete: /data/data/com.termux/files/home/03_NotoSansCJK-OTC.zip
Download Results: gid |stat|avg speed |path/URI ======+====+===========+======================================================= e065f1|OK | 15MiB/s|/data/data/com.termux/files/home/03_NotoSansCJK-OTC.zip
Status Legend: (OK):download completed. ~ $ ~ $ wget2 --progress bar $url
03_NotoSansCJK-OTC.z 100% [=======================================================>] 99.83M 18.54MB/s [Files: 1 Bytes: 99.83M [17.40MB/s] Redirects: 0 Todo: ] ~ $速度差不多
Related problem
关于tmoe中的依赖中 Description: TMOE, More Optional Environments Pre-Depends: aria2 (>= 1.30.0), binutils (>= 2.28-5), coreutils (>= 8.26-3), curl (>= 7.52.1-5) 依赖aria2和curl貌似都是下载工具且并没有太大的区别,那么这两个依赖是否重复
Describe the solution you'd like
依赖去掉curl或者aria2或者全部去掉改为wget或wget2
Describe alternatives you've considered
No response
Additional context and details
No response