我正在尝试使用以下命令下载混乱的异常日志。
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 中可以做到这一点吗?
使用 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 替换为您想要延迟的秒数即可。
wget 有延迟选项
wget --wait=seconds
还有随机延迟选项
wget --random-wait
在 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
在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 秒发送一个请求。