mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 18:37:07 -05:00 
			
		
		
		
	[vimeo] Fix video password verification for videos protected by Referer HTTP header
This commit is contained in:
		@@ -435,6 +435,8 @@ class VimeoIE(VimeoBaseInfoExtractor):
 | 
			
		||||
            'url': 'https://vimeo.com/160743502/abd0e13fb4',
 | 
			
		||||
            'only_matching': True,
 | 
			
		||||
        }
 | 
			
		||||
        # https://gettingthingsdone.com/workflowmap/
 | 
			
		||||
        # vimeo embed with check-password page protected by Referer header
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
@@ -465,20 +467,22 @@ class VimeoIE(VimeoBaseInfoExtractor):
 | 
			
		||||
        urls = VimeoIE._extract_urls(url, webpage)
 | 
			
		||||
        return urls[0] if urls else None
 | 
			
		||||
 | 
			
		||||
    def _verify_player_video_password(self, url, video_id):
 | 
			
		||||
    def _verify_player_video_password(self, url, video_id, headers):
 | 
			
		||||
        password = self._downloader.params.get('videopassword')
 | 
			
		||||
        if password is None:
 | 
			
		||||
            raise ExtractorError('This video is protected by a password, use the --video-password option')
 | 
			
		||||
        data = urlencode_postdata({
 | 
			
		||||
            'password': base64.b64encode(password.encode()),
 | 
			
		||||
        })
 | 
			
		||||
        pass_url = url + '/check-password'
 | 
			
		||||
        password_request = sanitized_Request(pass_url, data)
 | 
			
		||||
        password_request.add_header('Content-Type', 'application/x-www-form-urlencoded')
 | 
			
		||||
        password_request.add_header('Referer', url)
 | 
			
		||||
        return self._download_json(
 | 
			
		||||
            password_request, video_id,
 | 
			
		||||
            'Verifying the password', 'Wrong password')
 | 
			
		||||
        headers = merge_dicts(headers, {
 | 
			
		||||
            'Content-Type': 'application/x-www-form-urlencoded',
 | 
			
		||||
        })
 | 
			
		||||
        checked = self._download_json(
 | 
			
		||||
            url + '/check-password', video_id,
 | 
			
		||||
            'Verifying the password', data=data, headers=headers)
 | 
			
		||||
        if checked is False:
 | 
			
		||||
            raise ExtractorError('Wrong video password', expected=True)
 | 
			
		||||
        return checked
 | 
			
		||||
 | 
			
		||||
    def _real_initialize(self):
 | 
			
		||||
        self._login()
 | 
			
		||||
@@ -591,7 +595,7 @@ class VimeoIE(VimeoBaseInfoExtractor):
 | 
			
		||||
                                     cause=e)
 | 
			
		||||
        else:
 | 
			
		||||
            if config.get('view') == 4:
 | 
			
		||||
                config = self._verify_player_video_password(redirect_url, video_id)
 | 
			
		||||
                config = self._verify_player_video_password(redirect_url, video_id, headers)
 | 
			
		||||
 | 
			
		||||
        vod = config.get('video', {}).get('vod', {})
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user