下载时限制wget或curl的下载速度

下载时限制wget或curl的下载速度

是否可以限制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

两年后,我将把这个花絮扔进去,虽然wgetcurl不是交互式的,至少wget(可能curl但我不确定)有开关-c(代表从我之前停止下载的地方继续)。因此,如果您需要在下载过程中更改速度,并且您可能使用了开关-c,那么--limit-rate=x您可以停止wget并以​​不同的速度重新启动它,它就会改变。

答案3

可以使用tcnetem工具限制流量速率,但这将限制计算机网络接口的速率。我假设您仅使用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-delayrobots.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.

相关内容