Перейти к содержимому

yt-dlp 403 Forbidden: почему возникает и в каком порядке исправлять

Автор Команда TunelioОпубликовано

Большинство ошибок yt-dlp «HTTP Error 403: Forbidden» — это устаревшая сборка или отсутствующий JavaScript-рантайм, а не бан. Выполните yt-dlp -U, поставьте Deno, повторите с -4 --rm-cache-dir. Если 403 пережил это, ниже каждый симптом привязан к реальной причине: принудительные форматы, отсутствие PO-токена, cookies, которые всё портят, и IP дата-центров, которым YouTube отказывает в медиа.

Быстрое решение

yt-dlp -U                                   # или: pip install -U yt-dlp
curl -fsSL https://deno.land/install.sh | sh  # JS-рантайм для челленджей YouTube
yt-dlp -4 --rm-cache-dir "https://youtu.be/dQw4w9WgXcQ"

Три команды закрывают подавляющее большинство жалоб на 403. Если ваша не из них, не бросайтесь перебирать флаги — пройдите список ниже по порядку. Каждый шаг отвечает за свою причину, а неверный (обычно cookies) может сделать временный 403 постоянным.

Что означает «HTTP Error 403: Forbidden» в yt-dlp

403 — это отказ YouTube отдать то, что он только что предложил. Есть два разных места, где это случается. Первое — запрос информации (страница watch или API плеера): YouTube даже не сообщает yt-dlp, какие форматы существуют; это проблема доверия к клиенту или IP. Второе, гораздо более частое, — запрос медиа: yt-dlp получил список форматов и подписанную ссылку googlevideo.com, начал скачивать, а медиасервер ответил 403. Ссылка была подписана под конкретный клиент, IP и Proof-of-Origin токен; если что-то не совпало с ожиданиями YouTube, загрузка отклоняется, хотя метаданные выглядели нормально.

Понимание, какой из двух случаев у вас, определяет решение. Запустите с -v: если ошибка появляется после «Downloading … formats» или посреди загрузки — это медиа-403 (шаги 4–7); если до вывода списка форматов — это инфо-403 (шаги 1–3, затем руководство по бот-стене).

Исправляйте yt-dlp 403 в этом порядке

1. Обновите yt-dlp

YouTube каждые несколько недель меняет подпись и выдачу медиа-ссылок — специально, чтобы ломать автоматические клиенты, — а yt-dlp отвечает за считанные дни. Любая сборка старше месяца может выдавать 403, который не исправит ни один флаг. Используйте официальный бинарник или pip — пакеты дистрибутивов отстают на месяцы — и рассмотрите nightly-канал, если стабильный релиз ещё не вышел.

2. Установите JavaScript-рантайм (Deno)

С 2025 года yt-dlp нужен внешний JS-рантайм для решения кода подписей и челленджей YouTube. Без него он молча теряет форматы или откатывается на способ доставки, который даёт 403. Рекомендуется Deno; Node.js и Bun поддерживаются. Установите и проверьте, что yt-dlp -v показывает рантайм в отладочном заголовке. Если стоял старый плагин YTNsigDeno — удалите: он устарел и конфликтует со встроенным решателем.

3. Очистите кеш и принудительно IPv4

yt-dlp -4 --rm-cache-dir "https://youtu.be/dQw4w9WgXcQ"

Устаревший кеш подписей от прошлой версии даёт 403 на каждом видео; --rm-cache-dir сбрасывает его. -4 важен на серверах с IPv6: YouTube оценивает весь /64 как один адрес, и на нашем парке в августе 2026 примерно три из десяти извлечений возвращали медиахост, который отказывал по IPv6, но отдавал ту же ссылку по IPv4.

4. Перестаньте принудительно задавать формат

С августа 2026 идёт волна сообщений о 403 при принудительном формате через -f (например -f 137+140), тогда как автоматический выбор работает. Часть itag YouTube теперь отдаёт только клиентам с PO-токеном, а принудительный itag это игнорирует. Уберите -f или выразите предпочтение сортировкой:

# предпочесть 1080p mp4 без принудительного itag
yt-dlp -S "res:1080,ext:mp4" "https://youtu.be/dQw4w9WgXcQ"

5. Попробуйте другой клиент плеера

yt-dlp --extractor-args "youtube:player_client=android" "https://youtu.be/dQw4w9WgXcQ"
# также: tv, mweb, web_embedded — каждый подписывается и оценивается по-своему

YouTube подписывает медиа-ссылки под каждый клиент, и набор клиентов с «чистыми» ссылками часто меняется. Смена клиента — законный обход, а не постоянное решение; часть клиентов ограничена 720p или требует своих cookies. Следите в -v за «requires a PO token» — это сообщение указывает на шаг 6, а не на перебор клиентов.

6. Дайте PO-токен

Некоторые форматы и клиенты отдаются только с Proof-of-Origin токеном, который выдаёт скрипт BotGuard YouTube. С JS-рантаймом yt-dlp получает его для части клиентов; для остальных поставьте плагин-провайдер (bgutil-ytdlp-pot-provider) — небольшой сервис токенов, который yt-dlp вызывает сам. Классический признак отсутствующего токена — медиа-403 на 1080p+ при работающем 360p.

7. Cookies — осторожно и не первым делом

Cookies решают инфо-403 («Sign in to confirm you’re not a bot»), но могут породить медиа-403: мейнтейнеры отмечают, что с cookies часть форматов становится недоступной, а файл cookies из ещё открытого браузера инвалидируется, когда браузер обновляет сессию. Если нужны — экспортируйте из приватного окна с запасным аккаунтом, закройте окно и передайте --cookies cookies.txt. Никогда не используйте основной аккаунт на сервере.

8. Сбавьте темп и смените IP

yt-dlp --sleep-requests 2 --sleep-interval 5 --max-sleep-interval 15 --limit-rate 2M ...

Массовые запуски упираются в лимиты и получают 403; добавьте паузы и ограничьте параллельность. Если чистый ноутбук на домашнем подключении скачивает то же видео, а сервер нет — причина в репутации IP сервера: пустите через резидентный прокси (--proxy) или перенесите извлечение. Дешёвые дата-центровые прокси оцениваются как ваш VPS и почти не помогают.

Симптом → причина

  • 403 до вывода списка форматов → отказ на уровне информации: обновление (1), JS-рантайм (2), затем руководство по бот-стене.
  • 403 сразу на каждом видео после того, как вчера работало → YouTube что-то изменил: обновление (1), очистка кеша (3).
  • Первый кусок скачивается, потом 403 → подписанная ссылка не совпала с клиентом/IP/токеном; успешный первый кусок ничего не доказывает. Другой клиент (5), PO-токен (6).
  • 403 только на 1080p и выше, 360p работает → форматы за PO-токеном (6) или принудительный itag (4).
  • На ноутбуке работает, на VPS 403 → репутация IP и/или IPv6 (3, затем 8).
  • 403 только в плейлистах или массовых запусках → ограничение частоты (8).
  • Начало ломаться сразу после добавления cookies → причина в cookies (7): уберите их или переэкспортируйте из закрытого приватного окна.

Почему серверы и IPv6 получают 403 чаще

YouTube считает диапазоны дата-центров (AWS, GCP, Azure, любой VPS-провайдер) вероятной автоматизацией и отдаёт им меньше форматов, больше проверок и больше отказов. Две цифры с нашего парка извлечения за август 2026: примерно каждый четвёртый свежий выходной IP получал проверку при первом контакте, а около трёх из десяти извлечений возвращали хост googlevideo, недоступный или отказывающий по IPv6 при рабочем IPv4. Поэтому одна и та же команда проходит на ноутбуке и падает на сервере — и поэтому -4 стоит пробовать раньше всего остального.

Типичные ошибки

  • Передавать cookies всем клиентам, включая те, что не должны их использовать — yt-dlp предупреждает об этом; прислушайтесь.
  • Запускать от root с общим устаревшим кешем; используйте --rm-cache-dir и конфиг на пользователя.
  • Принудительно задавать itag из старого туториала (-f 137+140) вместо сортировки через -S.
  • Повторять в тесном цикле после 403 — это превращает временный отказ в помеченный IP.
  • Сидеть на прошлогоднем пакете дистрибутива и читать форумы вместо обновления.

Когда заплатки перестают окупаться

Если yt-dlp стоит внутри бота, приложения или пайплайна, танцы с 403 — обновления, рантаймы, PO-токены, гигиена cookies, чистые IP — становятся постоянной эксплуатационной статьёй. Хостинговый API держит всё это на своей стороне и возвращает ссылку одним запросом:

curl "https://tunelio.dev/create?url=https://youtu.be/dQw4w9WgXcQ&quality=1080p" \
  -H "Authorization: Bearer tnl_your_api_key"
# → { "url": "https://…/tunnel?id=…&sig=…", "file_size_str": "58.11 MB", "status": "ok" }

Tunelio — наш сервис, читайте этот раздел с поправкой на это. Для редких загрузок с домашнего подключения шагов 1–3 хватит, и yt-dlp остаётся правильным инструментом. Для всего, что работает без присмотра на сервере, обычно дешевле перестать владеть этой проблемой. Новые аккаунты получают 100 бесплатных кредитов, карта не нужна.

Источники

  • yt-dlp issue #14680 — «FIXED: [Youtube] ERROR: unable to download video data: HTTP Error 403: Forbidden».
  • yt-dlp issue #17395 — периодические 403 при скачивании (открытый трекинг-тикет).
  • README yt-dlp — требование JavaScript-рантайма (рекомендуется Deno) и справочник extractor-args.
  • Wiki yt-dlp — руководство по PO-токенам и «How do I pass cookies to yt-dlp?».
  • Наши измерения (парк извлечения Tunelio, август 2026): отказы медиахостов по IPv6 и доля проверок при первом контакте.

Частые вопросы

Cookies исправляют 403?

Они исправляют отказ типа «стена входа», а не медиа-отказ. Cookies могут даже вызывать медиа-403: часть форматов становится недоступной, а сессия истекает, когда браузер её обновляет. Используйте их в последнюю очередь, из закрытого приватного окна.

403 из-за моего IP?

На серверах — часто: адреса дата-центров и IPv6 оцениваются как вероятные боты. Если ноутбук на домашнем подключении проходит с той же командой, причина в IP — сначала -4, затем резидентный выход.

Почему сломалось за ночь?

YouTube изменил плеер или код подписи, и ваш yt-dlp устарел. Обновитесь, очистите кеш через --rm-cache-dir и убедитесь, что установлен JavaScript-рантайм.

Первая часть скачивается, потом 403 — что это?

Подписанная медиа-ссылка не совпала с клиентом, IP или PO-токеном, которых ждал YouTube; первый кусок не доказывает валидность ссылки. Смените клиент, дайте PO-токен и не задавайте itag принудительно.

Похожие руководства