Curl:请求之间的睡眠/延迟

问题描述 投票:0回答:4

我正在尝试使用以下命令下载混乱的异常日志。

curl --cookie ./flurry.jar -k -L "https://dev.flurry.com/exceptionLogsCsv.do?projectID=49999&versionCut=versionsAll&intervalCut=allTime&direction=1&offset=[0-100:10]" --output "exception#1.csv"

它工作正常,它根据偏移量(10、20、30 等)下载 csv 文件。我想在每个请求之间插入延迟。在 CURL 中可以做到这一点吗?

curl flurry
4个回答
9
投票

使用 bash shell (Linux) :

while :
do
    curl --cookie ./flurry.jar -k -L "https://dev.flurry.com/exceptionLogsCsv.do?projectID=49999&versionCut=versionsAll&intervalCut=allTime&direction=1&offset=[0-100:10]" --output "exception#1.csv"
    sleep 5m
done

是一个无限循环,延迟由

sleep
命令给出。

编辑。在 Windows 机器上,你可以使用这个技巧:

for /L %i in (0,0,0) do (
    curl --cookie ./flurry.jar -k -L "https://dev.flurry.com/exceptionLogsCsv.do?projectID=49999&versionCut=versionsAll&intervalCut=allTime&direction=1&offset=[0-100:10]" --output "exception#1.csv"
    ping -n XX 127.0.0.1>NUL
)

sleep
命令在 Windows 上不可用。但您可以使用
ping
来“模拟”它。只需将上面的 XX 替换为您想要延迟的秒数即可。


5
投票

wget 有延迟选项

wget --wait=seconds

还有随机延迟选项

wget --random-wait

4
投票

在 bash 中,这将暂停 0-60 范围内的随机秒数:

for d in {0..100..10}
do
    i=`printf "%03d" $d`
    curl --cookie ./flurry.jar -k -L 'https://dev.flurry.com/exceptionLogsCsv.do?projectID=49999&versionCut=versionsAll&intervalCut=allTime&direction=1&offset='$d --output 'exception'$i'.csv'
    sleep $(($RANDOM*60/32767))
done

3
投票

在curl 7.84.0及更高版本中,您可以将请求速率限制

--rate
选项一起使用:

请求速率以 N/U 形式提供,其中 N 是整数,U 是时间单位。支持的单位有 s(秒)、m(分钟)、h(小时)和 d(天,以 24 小时为单位)。如果没有提供 /U,默认时间单位是每小时传输次数。

因此,要在每个请求之间等待 10 秒,请使用

curl --rate 6/m


在curl 8.10.0及更高版本中,您也可以使用数字作为分母:

从curl 8.10.0 开始,此选项接受可选的“单位数量”。然后,请求率以 N / Z U(无空格)形式提供,其中 N 是数字,Z 是时间单位数,U 是时间单位。

您可以使用
curl --rate 1/10s

要求curl 每 10 秒发送一个请求。

    

© www.soinside.com 2019 - 2024. All rights reserved.