Add curl-cffi dependency and update README for browser impersonation support. Enhanced configuration options for yt-dlp to include impersonation settings, improving compatibility with anti-bot measures. Updated logging in main.py to reflect new impersonation settings.
This commit is contained in:
@@ -48,6 +48,9 @@ class Settings:
|
||||
cookies_from_browser: str | None = os.environ.get("PVDL_COOKIES_FROM_BROWSER") or None
|
||||
# Файл cookies в формате Netscape (cookies.txt).
|
||||
cookies_file: Path | None = _env_path_opt("PVDL_COOKIES_FILE")
|
||||
# Импперсонация браузера (TLS-отпечаток) для yt-dlp — нужна сайтам с анти-ботом
|
||||
# (иначе CDN рвёт соединение / 410). "chrome" по умолчанию; пусто — выключить.
|
||||
impersonate: str | None = os.environ.get("PVDL_IMPERSONATE", "chrome") or None
|
||||
|
||||
|
||||
settings = Settings()
|
||||
|
||||
@@ -53,6 +53,8 @@ async def lifespan(app: FastAPI):
|
||||
logger.info("yt-dlp cookies: из браузера %s", settings.cookies_from_browser)
|
||||
if settings.cookies_file:
|
||||
logger.info("yt-dlp cookies: файл %s", settings.cookies_file)
|
||||
if settings.impersonate:
|
||||
logger.info("yt-dlp импперсонация: %s", settings.impersonate)
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
|
||||
@@ -348,6 +348,12 @@ class YtDlpDownloader(Downloader):
|
||||
"noplaylist": True,
|
||||
**_ytdlp_cookie_opts(settings.cookies_from_browser, settings.cookies_file),
|
||||
}
|
||||
if settings.impersonate:
|
||||
# Глобально: браузерный отпечаток на ВСЕ запросы (страница + медиа),
|
||||
# иначе CDN рвёт скачивание видео-данных.
|
||||
from yt_dlp.networking.impersonate import ImpersonateTarget
|
||||
|
||||
base_opts["impersonate"] = ImpersonateTarget.from_str(settings.impersonate)
|
||||
default_tmpl = str(self._dir / "%(title)s [%(id)s].%(ext)s")
|
||||
|
||||
# Фаза 1: узнаём имя файла, не качая, чтобы развести дубли как браузер.
|
||||
|
||||
Reference in New Issue
Block a user