yt-dlp 403 Forbidden: यह क्यों होता है और किस क्रम में ठीक करें
लेखक Tunelio टीमप्रकाशित
yt-dlp की ज़्यादातर “HTTP Error 403: Forbidden” errors पुराना build या JavaScript runtime का न होना हैं — ban नहीं। yt-dlp -U चलाएँ, Deno लगाएँ, -4 --rm-cache-dir से दोबारा चलाएँ। 403 फिर भी बचे तो यह गाइड हर लक्षण को असली कारण से जोड़ती है: forced format, PO token की कमी, हालत बिगाड़ने वाली cookies, और data-center IP जिन्हें YouTube media देने से मना कर देता है।
तुरंत समाधान
yt-dlp -U # या: pip install -U yt-dlp
curl -fsSL https://deno.land/install.sh | sh # YouTube challenge के लिए JS runtime
yt-dlp -4 --rm-cache-dir "https://youtu.be/dQw4w9WgXcQ"तीन command ज़्यादातर 403 शिकायतें ठीक कर देते हैं। आपकी उनमें न हो तो flag फेंकना शुरू न करें — नीचे की सूची क्रम से करें। हर कदम अलग कारण का जवाब है, और ग़लत कदम (आमतौर पर cookies) अस्थायी 403 को स्थायी बना सकता है।
yt-dlp में “HTTP Error 403: Forbidden” का मतलब
403 यानी YouTube वह देने से मना कर रहा है जो उसने अभी दिया था। यह दो बिल्कुल अलग जगह होता है। पहला: info request (watch page या player API) — YouTube yt-dlp को यह भी नहीं बताता कि कौन-से format मौजूद हैं; यह client या IP पर भरोसे की समस्या है। दूसरा, कहीं ज़्यादा आम: media request — yt-dlp को format सूची और signed googlevideo.com URL मिला, download शुरू हुआ, और media server ने 403 दिया। वह URL किसी ख़ास client, IP और Proof-of-Origin token के लिए signed था; कुछ भी न मिले तो metadata ठीक दिखने पर भी download ठुकरा दिया जाता है।
आपके पास दोनों में से कौन-सा है, यही समाधान तय करता है। -v से चलाएँ: error “Downloading … formats” के बाद या download के बीच आए तो media 403 है (नीचे कदम 4–7); किसी format के दिखने से पहले आए तो info 403 है (कदम 1–3, फिर bot-दीवार गाइड)।
yt-dlp 403 इसी क्रम में ठीक करें
1. yt-dlp अपडेट करें
YouTube हर कुछ हफ़्तों में media URL को sign और serve करने का तरीका बदलता है — ख़ासकर automated client तोड़ने के लिए — और yt-dlp दिनों में जवाब देता है। एक महीने से पुराना कोई भी build ऐसे 403 दे सकता है जिसे कोई flag ठीक नहीं करेगा। official binary या pip इस्तेमाल करें — distro package अक्सर महीनों पीछे होते हैं — और stable release न आया हो तो nightly channel देखें।
2. JavaScript runtime (Deno) इंस्टॉल करें
2025 से yt-dlp को YouTube के signature और challenge code हल करने के लिए बाहरी JS runtime चाहिए। इसके बिना यह चुपचाप format खो देता है या ऐसे delivery तरीके पर गिरता है जो 403 देता है। Deno सुझाया जाता है; Node.js और Bun समर्थित हैं। इंस्टॉल कर जाँचें कि yt-dlp -v के debug header में यह दिखे। पुराना YTNsigDeno plugin हो तो हटाएँ — वह अप्रचलित है और built-in solver से टकराता है।
3. cache साफ़ करें और IPv4 force करें
yt-dlp -4 --rm-cache-dir "https://youtu.be/dQw4w9WgXcQ"पिछले version का बासी signature cache हर वीडियो पर 403 देता है; --rm-cache-dir उसे reset करता है। IPv6 वाले सर्वर पर -4 अहम है: YouTube पूरे IPv6 /64 को एक पता मानता है, और अगस्त 2026 में हमारे fleet पर लगभग दस में से तीन extraction ऐसा media host लौटाते थे जो IPv6 पर मना करता पर वही URL IPv4 पर ठीक देता।
4. कोई ख़ास format force करना बंद करें
अगस्त 2026 से रिपोर्टों की लहर है कि -f से format force करने पर (जैसे -f 137+140) 403 आता है जबकि automatic चयन चलता है। YouTube अब कुछ itag सिर्फ़ PO token वाले client को देता है, और forced itag इसे नज़रअंदाज़ करता है। -f हटाएँ, या पसंद sorting से बताएँ:
# ख़ास itag force किए बिना 1080p mp4 पसंद करें
yt-dlp -S "res:1080,ext:mp4" "https://youtu.be/dQw4w9WgXcQ"5. दूसरा player client आज़माएँ
yt-dlp --extractor-args "youtube:player_client=android" "https://youtu.be/dQw4w9WgXcQ"
# ये भी: tv, mweb, web_embedded — हर एक अलग तरह से signed और trustedYouTube media URL हर client के लिए अलग sign करता है, और साफ़ URL पाने वाले client का सेट अक्सर बदलता है। client बदलना जायज़ workaround है, स्थायी समाधान नहीं; कुछ client 720p पर रुकते हैं या अपनी cookies माँगते हैं। -v में “requires a PO token” देखें — यह संदेश कदम 6 की ओर इशारा है, client बदलते रहने की ओर नहीं।
6. PO token दें
कुछ format और client सिर्फ़ YouTube के BotGuard script से बने Proof-of-Origin token के साथ मिलते हैं। JS runtime से yt-dlp कुछ client के लिए इसे बना लेता है; बाकी के लिए provider plugin (bgutil-ytdlp-pot-provider) लगाएँ, जो छोटा token service चलाता है और yt-dlp उसे अपने-आप बुलाता है। token की कमी का क्लासिक संकेत: 360p चलता है पर 1080p+ पर media 403।
7. Cookies — सावधानी से, और पहले कदम के तौर पर नहीं
Cookies info 403 (“Sign in to confirm you’re not a bot”) हल करती हैं, पर media 403 पैदा कर सकती हैं: maintainer बताते हैं कि cookies देने पर कुछ format अनुपलब्ध हो जाते हैं, और खुले browser से export की गई cookie file तब बेकार हो जाती है जब browser session बदलता है। ज़रूरत हो तो spare account से logged-in private window से export करें, window बंद करें, फिर --cookies cookies.txt दें। सर्वर पर मुख्य account कभी न रखें।
8. रफ़्तार घटाएँ और IP बदलें
yt-dlp --sleep-requests 2 --sleep-interval 5 --max-sleep-interval 15 --limit-rate 2M ...bulk run rate-limit होकर 403 देते हैं; sleep जोड़ें और concurrency सीमित करें। घर के कनेक्शन पर साफ़ laptop वही वीडियो उतार ले और सर्वर न उतार पाए, तो कारण सर्वर के IP की reputation है — residential proxy (--proxy) से भेजें या extraction कहीं और ले जाएँ। सस्ते data-center proxy आपके VPS जैसे ही score पाते हैं और शायद ही मदद करें।
लक्षण → कारण
- किसी format के दिखने से पहले 403 → info-level इनकार: अपडेट (1), JS runtime (2), फिर bot-दीवार गाइड।
- कल तक चला, आज हर वीडियो पर तुरंत 403 → YouTube ने कुछ बदला: अपडेट (1), cache साफ़ (3)।
- पहला chunk उतरता है, फिर 403 → signed URL उस client/IP/token से मेल नहीं खाता; सफल पहला chunk सबूत नहीं है। दूसरा client (5), PO token (6)।
- सिर्फ़ 1080p और ऊपर 403, 360p चलता है → PO-token वाले format (6) या forced itag (4)।
- laptop पर चलता है, VPS पर 403 → IP reputation और/या IPv6 (3, फिर 8)।
- सिर्फ़ playlist या bulk run में 403 → rate limiting (8)।
- cookies जोड़ते ही fail शुरू → cookies ही कारण (7): हटाएँ या बंद private window से दोबारा export करें।
सर्वर और IPv6 पर 403 ज़्यादा क्यों
YouTube data-center range (AWS, GCP, Azure, हर VPS provider) को संभावित automation मानता है और उन्हें कम format, ज़्यादा challenge और ज़्यादा इनकार देता है। अगस्त 2026 में हमारे extraction fleet के दो आँकड़े: लगभग हर चौथा नया exit IP पहले संपर्क में challenge पाता था, और लगभग दस में से तीन extraction ऐसा googlevideo host लौटाते थे जो IPv6 पर पहुँच से बाहर या इनकार करता था जबकि IPv4 पर चलता था। इसीलिए वही command laptop पर चलती है और सर्वर पर गिरती है — और इसीलिए -4 सबसे पहले आज़माने लायक है।
आम ग़लतियाँ
- हर client को cookies देना, उन्हें भी जो cookies इस्तेमाल नहीं करने चाहिए — yt-dlp चेतावनी देता है; मानें।
- root से साझा, बासी cache के साथ चलाना; --rm-cache-dir और per-user config रखें।
- पुराने tutorial से copy किए itag force करना (-f 137+140) बजाय -S से sorting के।
- 403 के बाद tight loop में retry — यह अस्थायी इनकार को flagged IP में बदल देता है।
- पिछले साल का distro package चलाते रहना और अपडेट की जगह forum पढ़ना।
जब पैच करना फ़ायदे का न रहे
yt-dlp किसी bot, app या pipeline के अंदर हो तो 403 का यह नाच — अपडेट, runtime, PO token, cookie hygiene, साफ़ IP — बार-बार का operations खर्च है। hosted API यह सब सर्वर-साइड रखता है और एक request में download URL लौटाता है:
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 हमारी अपनी सेवा है, इसे ध्यान में रखकर पढ़ें। घर के कनेक्शन से कभी-कभार download के लिए कदम 1–3 काफ़ी हैं और yt-dlp सही औज़ार बना रहता है। सर्वर पर बिना निगरानी चलने वाली किसी भी चीज़ के लिए आमतौर पर इस समस्या का मालिक न रहना सस्ता है। नए account को 100 free credits, card की ज़रूरत नहीं।
स्रोत
- yt-dlp issue #14680 — “FIXED: [Youtube] ERROR: unable to download video data: HTTP Error 403: Forbidden”।
- yt-dlp issue #17395 — download के दौरान रुक-रुक कर 403 (खुला tracking issue)।
- yt-dlp README — JavaScript runtime की ज़रूरत (Deno सुझाया) और extractor-args संदर्भ।
- yt-dlp wiki — PO token guide और “How do I pass cookies to yt-dlp?”।
- हमारे अपने माप (Tunelio extraction fleet, अगस्त 2026): IPv6 media-host इनकार और पहले संपर्क की challenge दर।
सामान्य सवाल
क्या cookies 403 ठीक करती हैं?
वे login-दीवार वाला इनकार ठीक करती हैं, media वाला नहीं। cookies media 403 पैदा भी कर सकती हैं — कुछ format अनुपलब्ध हो जाते हैं या browser के session बदलने पर expire हो जाती हैं। इन्हें आख़िर में, बंद private window से इस्तेमाल करें।
क्या 403 मेरे IP की वजह से है?
सर्वर पर अक्सर: data-center और IPv6 पते संभावित bot माने जाते हैं। घर के कनेक्शन पर laptop उसी command से सफल हो तो कारण IP है — पहले -4, फिर residential exit।
रातों-रात क्यों टूट गया?
YouTube ने player या signing code बदला और आपका yt-dlp अब पुराना है। अपडेट करें, --rm-cache-dir से cache साफ़ करें, और सुनिश्चित करें कि JavaScript runtime इंस्टॉल है।
पहला हिस्सा उतरता है, फिर 403 — यह क्या है?
signed media URL उस client, IP या PO token से मेल नहीं खाया जिसकी YouTube को उम्मीद थी; पहला chunk URL के valid होने का सबूत नहीं। client बदलें, PO token दें, itag force न करें।