{"record":{"id":"a7e9a9a756be9478","repo":"ytdl-org/youtube-dl","slug":"unable-to-log-in-a7e9a9","errorCode":null,"errorMessage":"Unable to log in","messagePattern":"Unable to log in","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/vimeo.py","lineNumber":74,"sourceCode":"            'email': username,\n            'password': password,\n            'service': 'vimeo',\n            'token': token,\n        }\n        self._set_vimeo_cookie('vuid', vuid)\n        try:\n            self._download_webpage(\n                self._LOGIN_URL, None, 'Logging in',\n                data=urlencode_postdata(data), headers={\n                    'Content-Type': 'application/x-www-form-urlencoded',\n                    'Referer': self._LOGIN_URL,\n                })\n        except ExtractorError as e:\n            if isinstance(e.cause, compat_HTTPError) and e.cause.code == 418:\n                raise ExtractorError(\n                    'Unable to log in: bad username or password',\n                    expected=True)\n            raise ExtractorError('Unable to log in')\n\n    def _get_video_password(self):\n        password = self._downloader.params.get('videopassword')\n        if password is None:\n            raise ExtractorError(\n                'This video is protected by a password, use the --video-password option',\n                expected=True)\n        return password\n\n    def _verify_video_password(self, url, video_id, password, token, vuid):\n        if url.startswith('http://'):\n            # vimeo only supports https now, but the user can give an http url\n            url = url.replace('http://', 'https://')\n        self._set_vimeo_cookie('vuid', vuid)\n        return self._download_webpage(\n            url + '/password', video_id, 'Verifying the password',\n            'Wrong password', data=urlencode_postdata({\n                'password': password,","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/vimeo.py#L56-L92","documentation":"Raised by VimeoBaseInfoExtractor._login when the login POST fails for any reason other than the 418 bad-credentials case — network errors, unexpected status codes, HTML challenge pages, or the endpoint changing. It is the generic fallback of the except block and is NOT expected=True, so it usually surfaces as an unexpected extraction error.","triggerScenarios":"The POST to https://vimeo.com/log_in raises an ExtractorError whose cause is not a 418 HTTPError — e.g. 429 rate limit, Cloudflare/interstitial response, timeout, or markup change breaking the follow-up handling.","commonSituations":"Repeated automated logins triggering rate limiting; Vimeo adding bot protection to the login flow; transient proxy/TLS failures; the login form flow changing (CSRF token extraction already done via _extract_xsrft_and_vuid failing first would raise earlier).","solutions":["Retry after a delay or from a different IP if rate-limited or bot-challenged.","Confirm plain password login still works in a browser on the same network; if Vimeo now requires JS/verification, extractor password login may be dead — prefer cookies (--cookies).","If credentials are actually wrong, you will get the 418 branch instead; check which message you received before debugging the network.","Keep youtube-dl updated for changes to the login flow."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if not e.expected and 'Unable to log in' in str(e):\n        backoff_retry(url, max_attempts=3)  # generic login failure: may be transient (rate limit, challenge)\n    else:\n        raise","preventionTips":["Rate-limit login attempts to avoid 429s and bot challenges.","Distinguish this generic failure from the 418 bad-password variant before debugging.","Consider cookie-based auth (--cookies) when password login is challenged."],"tags":["authentication","network","vimeo","bot-protection"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}