视频资源路径探测过程记录
🧩 起因与问题背景
在一次浏览某 iOS 相关的**付费课程网站**时,我注意到该平台提供了第一讲的免费视频试听。
在播放页面中,通过浏览器的右键菜单或开发者工具复制视频地址,发现其链接是如下格式的直链:
https://网站域名/video/ios/视频名称.mp4
该链接可**直接访问、播放或下载**,并不需要登录验证、token 授权或 Referer 限制。由此引发了我的兴趣:
是否该课程的其他视频也采用了类似的方式上传在同一目录中?
于是我尝试访问目录地址:
https://网站域名/video/ios
希望获取目录列表,但服务器返回了 403 Forbidden 错误。这说明该网站的服务器(nginx)**禁止列出目录内容**,只能通过明确的文件名来访问资源。
此外,该网站的主页是基于 WordPress 搭建的,我进一步尝试从多个角度探索资源路径:
查看 HTML 页面源码和 JavaScript 动态加载逻辑
分析浏览器 Network 抓包信息
请求 WordPress 的 REST API 接口(如 /wp-json/wp/v2/posts)
查看 /feed/ RSS、/sitemap.xml 等公开内容索引
最终确认该路径下的 .mp4 文件并未被直接引用在任何文章或可索引页面中。
与此同时,从实际抓到的几个 .mp4 链接来看,它们采用了明显的**编号命名**(如 1.mp4, 8.mp4, 12.mp4 等),推测资源目录采用了**数字序列的文件名方式存储视频**。
因此,为了获取该目录下全部可用的视频资源,我决定使用编程方式进行**暴力探测与文件名枚举扫描**。
🕵️♂️ 探测过程和遇到的障碍
❌ 目录访问受限
访问:
https://网站域名/video/ios/
返回:
403 Forbidden(禁止访问目录)
说明服务器关闭了目录索引(Index Listing)。
❌ 页面中无视频引用
尝试的途径包括:
/feed/(RSS) → 没有 .mp4 链接
/wp-json/wp/v2/posts(REST API) → 没有引用该视频目录
页面 HTML 和 JS 源码 → 没有硬编码 .mp4 路径
sitemap.xml → 无资源目录信息
✅ 技术决策:暴力文件名探测
从现有的已知地址 8.mp4 推测,该目录下的视频采用**编号命名(如 1.mp4 ~ N.mp4)**。
因此,我使用 Python 编写脚本,暴力探测 1.mp4 ~ N.mp4 是否存在,自动过滤 404,记录有效资源,并最终下载。
🔧 Python 脚本:探测 + 下载
import requests
import time
import os
# 设置目标前缀
base_url = "https://网站域名/video/ios/"
headers = {"User-Agent": "Mozilla/5.0"}
# 设置起始和结束编号(
start_id = 1
end_id = 50
# 是否保存结果
save_file = "found_videos.txt"
found = []
print(f"🚀 开始扫描 {base_url} 下的视频资源...\n")
for i in range(start_id, end_id + 1):
filename = f"{i}.mp4"
url = f"{base_url}{filename}"
try:
r = requests.head(url, headers=headers, timeout=1) # 超时1秒
if r.status_code == 200:
print(f"✅ 找到视频: {url}")
found.append(url)
elif r.status_code == 403:
print(f"🚫 被禁止访问: {url}")
elif r.status_code != 404:
print(f"⚠️ 状态 {r.status_code}: {url}")
except Exception as e:
print(f"❌ 请求出错: {url} — {e}")
if i % 10 == 0:
print(f"已扫描到第 {i} 个视频...")
time.sleep(0.2) # 延迟放在循环最后
# 写入结果文件
if found:
with open(save_file, "w") as f:
f.writelines(link + "\n" for link in found)
print(f"\n📄 所有存在的视频已保存至:{save_file}")
# 新增:下载视频
download_dir = "downloaded_videos"
os.makedirs(download_dir, exist_ok=True)
print(f"\n⬇️ 开始下载视频到 {download_dir} 文件夹...")
for url in found:
filename = url.split("/")[-1]
local_path = os.path.join(download_dir, filename)
try:
with requests.get(url, headers=headers, stream=True, timeout=10) as r:
r.raise_for_status()
with open(local_path, "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
print(f"✅ 下载完成: {filename}")
except Exception as e:
print(f"❌ 下载失败: {filename} — {e}")
print("🎉 所有可用视频下载完成!")
else:
print("\n❗ 未发现任何可访问的视频。")
print("✅ 扫描结束。")
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!