{"record":{"id":"38e82baf1010236c","repo":"ytdl-org/youtube-dl","slug":"unable-to-log-in-38e82b","errorCode":null,"errorMessage":"Unable to log in","messagePattern":"Unable to log in","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/vlive.py","lineNumber":106,"sourceCode":"                note='Downloading login info',\n                headers={'Referer': 'https://www.vlive.tv/home'})\n            return try_get(\n                login_info, lambda x: x['message']['login'], bool) or False\n\n        LOGIN_URL = 'https://www.vlive.tv/auth/email/login'\n        self._request_webpage(\n            LOGIN_URL, None, note='Downloading login cookies')\n\n        self._download_webpage(\n            LOGIN_URL, None, note='Logging in',\n            data=urlencode_postdata({'email': email, 'pwd': password}),\n            headers={\n                'Referer': LOGIN_URL,\n                'Content-Type': 'application/x-www-form-urlencoded'\n            })\n\n        if not is_logged_in():\n            raise ExtractorError('Unable to log in', expected=True)\n\n    def _call_api(self, path_template, video_id, fields=None):\n        query = {'appId': self._APP_ID, 'gcc': 'KR', 'platformType': 'PC'}\n        if fields:\n            query['fields'] = fields\n        try:\n            return self._download_json(\n                'https://www.vlive.tv/globalv-web/vam-web/' + path_template % video_id, video_id,\n                'Downloading %s JSON metadata' % path_template.split('/')[-1].split('-')[0],\n                headers={'Referer': 'https://www.vlive.tv/'}, query=query)\n        except ExtractorError as e:\n            if isinstance(e.cause, compat_HTTPError) and e.cause.code == 403:\n                self.raise_login_required(json.loads(e.cause.read().decode('utf-8'))['message'])\n            raise\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/vlive.py#L88-L124","documentation":"VLive login error: after fetching login cookies and POSTing email/pwd to LOGIN_URL, the extractor's is_logged_in() check still reports an anonymous session, so it raises 'Unable to log in' with expected=True. The credential POST apparently succeeded HTTP-wise but the session was not authenticated.","triggerScenarios":"Passing -u/-p for any VLive extractor where the login POST does not produce a logged-in session: wrong password, CAPTCHA/challenge, or an account that cannot use password login.","commonSituations":"Wrong credentials; VLive (now Weverse) changed or disabled classic email login; cookies/session invalidated server-side.","solutions":["Verify the email/password pair on the VLive site in a browser","Skip -u/-p if the content is public","Note VLive has migrated to Weverse; use the Weverse extractor or site for current content"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"from youtube_dl.utils import ExtractorError\ntry:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'Unable to log in' in str(e):\n        youtube_dl.YoutubeDL({}).extract_info(url)  # anonymous fallback for public content","preventionTips":["Only use VLive credentials when content is members-only","Migrate pipelines to Weverse — VLive is discontinued","Verify login works in a browser before automating"],"tags":["vlive","login","authentication","deprecated-site"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}