Bash脚本下载52k文件遇429错误,如何每5次下载后暂停X时长?
解决wget请求频繁导致429错误的脚本优化方案
嘿,遇到429错误太正常啦——这是服务器在提醒你请求发得太密集啦!咱们给循环加个简单的计数器,每下载5个文件就暂停一会儿,就能轻松避开这个限制。
修改后的脚本如下:
# 先设置好暂停时长,把10改成你需要的秒数就行 PAUSE_DURATION=10 count=0 for i in {1..52000}; do # 保留你原来的断点续传下载命令 wget -c "download.hebrewbooks.org/downloadhandler.ashx?req=$i" # 每完成一次下载,计数器加1 count=$((count + 1)) # 检查是否刚完成第5、10、15...个文件,是的话就暂停 if [ $((count % 5)) -eq 0 ]; then echo "已下载5个文件,暂停${PAUSE_DURATION}秒..." sleep $PAUSE_DURATION fi done
几个实用小细节:
- 你可以根据服务器的严格程度调整
PAUSE_DURATION的数值,比如限制严就设成30秒,宽松的话5秒也可能够用,多试几次就能找到合适的间隔 - 不管下载成功还是失败,计数器都会正常累加——毕竟哪怕请求失败,服务器也已经收到你的请求并计入频率统计了
- 如果想避免固定间隔被服务器识别成脚本,还可以把暂停改成随机时长,比如把
sleep $PAUSE_DURATION换成sleep $((RANDOM % 5 + PAUSE_DURATION)),这样每次暂停时长是PAUSE_DURATION到PAUSE_DURATION+4之间的随机数
内容的提问来源于stack exchange,提问作者Chasidish
相关产品推荐
相关产品推荐

