diff options
Diffstat (limited to 'youtube_dl/extractor/udemy.py')
| -rw-r--r-- | youtube_dl/extractor/udemy.py | 35 | 
1 files changed, 20 insertions, 15 deletions
| diff --git a/youtube_dl/extractor/udemy.py b/youtube_dl/extractor/udemy.py index 4667ed83b..e2bab52fe 100644 --- a/youtube_dl/extractor/udemy.py +++ b/youtube_dl/extractor/udemy.py @@ -15,7 +15,8 @@ from ..utils import (  class UdemyIE(InfoExtractor):      IE_NAME = 'udemy'      _VALID_URL = r'https?://www\.udemy\.com/(?:[^#]+#/lecture/|lecture/view/?\?lectureId=)(?P<id>\d+)' -    _LOGIN_URL = 'https://www.udemy.com/join/login-submit/' +    _LOGIN_URL = 'https://www.udemy.com/join/login-popup/?displayType=ajax&showSkipButton=1' +    _ORIGIN_URL = 'https://www.udemy.com'      _NETRC_MACHINE = 'udemy'      _TESTS = [{ @@ -74,29 +75,33 @@ class UdemyIE(InfoExtractor):                  expected=True)          login_popup = self._download_webpage( -            'https://www.udemy.com/join/login-popup?displayType=ajax&showSkipButton=1', None, -            'Downloading login popup') +            self._LOGIN_URL, None, 'Downloading login popup')          if login_popup == '<div class="run-command close-popup redirect" data-url="https://www.udemy.com/"></div>':              return -        csrf = self._html_search_regex( -            r'<input type="hidden" name="csrf" value="(.+?)"', -            login_popup, 'csrf token') +        login_form = self._form_hidden_inputs('login-form', login_popup) + +        login_form.update({ +            'email': username.encode('utf-8'), +            'password': password.encode('utf-8'), +        }) -        login_form = { -            'email': username, -            'password': password, -            'csrf': csrf, -            'displayType': 'json', -            'isSubmitted': '1', -        }          request = compat_urllib_request.Request(              self._LOGIN_URL, compat_urllib_parse.urlencode(login_form).encode('utf-8')) -        response = self._download_json( +        request.add_header('Referer', self._ORIGIN_URL) +        request.add_header('Origin', self._ORIGIN_URL) + +        response = self._download_webpage(              request, None, 'Logging in as %s' % username) -        if 'returnUrl' not in response: +        if all(logout_pattern not in response +               for logout_pattern in ['href="https://www.udemy.com/user/logout/', '>Logout<']): +            error = self._html_search_regex( +                r'(?s)<div[^>]+class="form-errors[^"]*">(.+?)</div>', +                response, 'error message', default=None) +            if error: +                raise ExtractorError('Unable to login: %s' % error, expected=True)              raise ExtractorError('Unable to log in')      def _real_extract(self, url): | 
