如何通过curl获取带认证站点下可直接访问的文件列表?
获取目标目录文件列表的curl实现方案
由于目标站点的目录(https://www.example.com/files/download)存在认证限制,但具体文件可直接访问,你可以从以下几个方向尝试获取文件列表:
1. 针对规律命名文件的批量检测
如果文件是按数字、字母序列命名(比如你用到的1.mp4、2.mp4),可以用curl仅请求响应头来快速验证文件是否存在,避免下载完整内容:
- 单个文件存在性检测:
curl -k -I -s https://example.com/file/download/1.mp4 | head -n 1
- 批量检测连续编号文件,过滤出存在的(HTTP状态码为200/206):
for i in {1..20}; do status=$(curl -k -I -s https://example.com/file/download/$i.mp4 | head -n 1 | awk '{print $2}') if [ "$status" -eq 200 ] || [ "$status" -eq 206 ]; then echo "存在文件: $i.mp4" fi done
参数说明:-I仅请求响应头,-s启用静默模式减少冗余输出,通过状态码判断文件是否存在。
2. 检查目录索引是否可访问
部分站点可能存在配置疏漏,即使目录有认证限制,仍可能返回目录索引页面。直接请求目录URL并提取内容:
curl -k -s https://www.example.com/files/download/
如果返回带文件列表的HTML,可通过grep提取文件名:
curl -k -s https://www.example.com/files/download/ | grep -oP 'href="\K[^"]+\.mp4'
3. 枚举常见文件名
如果文件命名无明显规律,可针对常见媒体文件名批量检测:
for name in video sample test demo; do status=$(curl -k -I -s https://example.com/file/download/$name.mp4 | head -n 1 | awk '{print $2}') if [ "$status" -eq 200 ] || [ "$status" -eq 206 ]; then echo "存在文件: $name.mp4" fi done
注意:以上方法的有效性依赖于站点配置和文件命名规则,若站点采用随机化文件名或反枚举措施,可能无法获取完整列表。
内容的提问来源于stack exchange,提问作者sajjad kargar
相关产品推荐
相关产品推荐

