使用 Python 批量校验 OpenList 直链可用性的实践
【摘要】 介绍用 Python 并发批量校验 OpenList 直链可用性的做法:只取响应头、控制并发、间隔重测区分瞬时限流与链接失效,并把结果落盘统计可用率。
背景
在自建媒体库场景中,我们会把网盘中的视频以直链形式对外提供。直链是否仍然有效,需要定期批量校验;如果逐个手工打开,效率很低。本文给出一个用 Python 批量校验 OpenList 直链可用性的实践方案。
思路
核心思路有三点:
- 不下载整个文件,只取响应头,判断状态码是否为 200 或 302;
- 用并发控制代替串行遍历,避免把带宽打满;
- 把结果落盘,方便后续统计与告警。
关键代码
使用 requests 的 HEAD 请求,配合 Range 头避免拉取正文:
import requests, concurrent.futures
def check(url):
try:
r = requests.head(url, headers={"Range": "bytes=0-1"},
timeout=10, allow_redirects=True)
return url, r.status_code
except Exception as e:
return url, repr(e)
with concurrent.futures.ThreadPoolExecutor(max_workers=8) as ex:
for url, code in ex.map(check, urls):
print(url, code)
注意事项
第一,部分网盘对高频访问有限流,建议在每个请求之间加 sleep 并控制并发度为 4 到 8;第二,HEAD 方法在某些 CDN 上不被支持,此时要退回 GET 并加 Range 头,只取前若干字节;第三,遇到 403 时要区分是链接过期还是触发了风控,可通过间隔重测来判定:间隔后恢复说明是瞬时限流,持续 403 才是链接失效。
结果统计
把每条链接的状态码写入 CSV,用 pandas 按状态码分组统计,就可以得到整体可用率。可用率低于阈值时,触发告警重新生成直链即可。
小结
整套方案不到五十行代码,关键在于控制并发、只取头部、间隔重测丢掉瞬时错误这三点。希望对你排查自建媒体库的失效链接有所帮助。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)