是否可以限制wget
或的下载速度curl
?
下载时是否可以更改油门值?
答案1
是的,wget 和curl 都支持限制您的下载速率。手册页中直接提到了这两个选项。
卷曲
--limit-rate <speed> Specify the maximum transfer rate you want curl to use. This feature is useful if you have a limited pipe and you'd like your transfer not to use your entire bandwidth. The given speed is measured in bytes/second, unless a suffix is appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
例如:curl --limit-rate 423K
获取
--limit-rate=amount Limit the download speed to amount bytes per second. Amount may be expressed in bytes, kilobytes with the k suffix, or megabytes with the m suffix. For example, --limit-rate=20k will limit the retrieval rate to 20KB/s. This is useful when, for whatever reason, you don't want Wget to consume the entire available bandwidth.
例如:wget --limit-rate=423k
答案2
两年后,我将把这个花絮扔进去,虽然wget
和curl
不是交互式的,至少wget
(可能curl
但我不确定)有开关-c
(代表从我之前停止下载的地方继续)。因此,如果您需要在下载过程中更改速度,并且您可能使用了开关-c
,那么--limit-rate=x
您可以停止wget
并以不同的速度重新启动它,它就会改变。
答案3
可以使用tc
和netem
工具限制流量速率,但这将限制计算机网络接口的速率。我假设您仅使用wget
或 ,curl
并且没有其他应用程序通过网络接口交换流量。
tc
使用令牌桶过滤器(TBF)来控制速率。
TBF 的一个示例如下(参考文献 1):http://www.lartc.org/manpages/tc-tbf.html):
附加一个持续最大速率为 0.5mbit/s、峰值速率为 1.0mbit/s、5KB 缓冲区的 TBF,计算出预存储桶队列大小限制,以便 TBF 导致最多 70ms 的延迟,并具有完美的峰值速率行为, 问题:
# tc qdisc add dev eth0 root tbf rate 0.5mbit \ burst 5kb latency 70ms peakrate 1mbit \ minburst 1540
使用 tc 和 netem 的另一个示例如下(可在http://www.linuxfoundation.org/collaborate/workgroups/networking/netem):
netem 规则没有内置速率控制,而是使用其他进行速率控制的规则之一。在本例中,我们使用令牌桶过滤器(TBF)来限制输出。
添加通过接口 eth0 进出的每个数据包的延迟
# tc qdisc add dev eth0 root handle 1:0 netem delay 100ms
添加 tbf 中的数据速率、数据包缓冲区大小和最大突发限制
# tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000
查看 tc 中为接口 eth0 分配的规则列表
# tc -s qdisc ls dev eth0
上述命令的输出如下
qdisc netem 1: limit 1000 delay 100.0ms
Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )
qdisc tbf 10: rate 256Kbit burst 1599b lat 26.6ms
Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )
检查缓冲区和限制的选项,因为您可能会发现您需要比这些更大的默认值(它们以字节为单位)
答案4
对于 wget,当一次下载多个页面时,我发现该--wait
选项更容易理解。它使 wget 在请求之间等待一定的秒数,这与Crawl-delay
robots.txt 的指令更加一致。
获取
-w seconds
--wait=seconds
Wait the specified number of seconds between the retrievals. Use of this
option is recommended, as it lightens the server load by making the
requests less frequent. Instead of in seconds, the time can be specified
in minutes using the "m" suffix, in hours using "h" suffix, or in days
using "d" suffix.
Specifying a large value for this option is useful if the network or the
destination host is down, so that Wget can wait long enough to reasonably
expect the network error to be fixed before the retry. The waiting
interval specified by this function is influenced by "--random-wait", which
see.