使用aria2c如何记录失败下载链接?求支持代理的并行下载工具
解决aria2c会话保存及批量请求失败链接捕获问题
一、aria2c --save-session 参数行为修正
你当前用的命令中,links2.txt和原文件完全一致,是因为--save-session默认会保存所有未完成的任务,但你的场景存在两个关键问题:
- 订阅链接触发请求后,只要HTTP返回成功状态码(哪怕无文件下载),aria2c就判定任务完成,不会存入会话文件
- 代理拒绝的请求,aria2c默认会多次重试,只有重试耗尽后才会标记为未完成
要让会话文件只保留真正失败的链接,需调整两个参数:
--max-tries=N:限制重试次数(比如设为1,避免无意义重试)--save-session-interval=0:关闭自动定时保存,只在进程结束时写入最终未完成任务
修改后的命令:
aria2c -j 10 --https-proxy=http://localhost:9080 -i links1.txt --save-session links2.txt --max-tries=1 --save-session-interval=0
二、订阅类请求的失败链接筛选
这类无文件返回的触发请求,可通过日志精准筛选失败项:
- 开启详细日志:
aria2c -j 10 --https-proxy=http://localhost:9080 -i links1.txt --log=aria2.log --log-level=info --max-tries=1
- 从日志提取失败链接:
grep -E 'FAILED|Connection refused' aria2.log | awk -F'URI=' '{print $2}' | awk '{print $1}' > failed_links.txt
三、替代工具推荐
如果aria2c的逻辑不符合需求,推荐两款适配场景的工具:
- curl:轻量灵活,支持SOCKS5代理,通过xargs实现并行处理
并行触发请求并收集失败链接:xargs -P 10 -I {} sh -c 'curl -x socks5://localhost:1080 {} >/dev/null 2>&1 || echo {}' < links1.txt > failed_links.txt - httpx:专为批量HTTP请求设计,支持高并发、多代理类型,自带结果筛选
输出失败请求(SOCKS5代理+100并发):httpx -l links1.txt -x socks5://localhost:1080 -c 100 -fail -o failed_links.txt
内容的提问来源于stack exchange,提问作者d-b
相关产品推荐
相关产品推荐

