[crunchyroll] Fix authentication (Closes #10655)
This commit is contained in:
parent
95be29e1c6
commit
eb5b1fc021
|
@ -34,22 +34,51 @@ from ..aes import (
|
||||||
|
|
||||||
|
|
||||||
class CrunchyrollBaseIE(InfoExtractor):
|
class CrunchyrollBaseIE(InfoExtractor):
|
||||||
|
_LOGIN_URL = 'https://www.crunchyroll.com/login'
|
||||||
|
_LOGIN_FORM = 'login_form'
|
||||||
_NETRC_MACHINE = 'crunchyroll'
|
_NETRC_MACHINE = 'crunchyroll'
|
||||||
|
|
||||||
def _login(self):
|
def _login(self):
|
||||||
(username, password) = self._get_login_info()
|
(username, password) = self._get_login_info()
|
||||||
if username is None:
|
if username is None:
|
||||||
return
|
return
|
||||||
self.report_login()
|
|
||||||
login_url = 'https://www.crunchyroll.com/?a=formhandler'
|
login_page = self._download_webpage(
|
||||||
data = urlencode_postdata({
|
self._LOGIN_URL, None, 'Downloading login page')
|
||||||
'formname': 'RpcApiUser_Login',
|
|
||||||
'name': username,
|
login_form_str = self._search_regex(
|
||||||
'password': password,
|
r'(?P<form><form[^>]+?id=(["\'])%s\2[^>]*>)' % self._LOGIN_FORM,
|
||||||
|
login_page, 'login form', group='form')
|
||||||
|
|
||||||
|
post_url = extract_attributes(login_form_str).get('action')
|
||||||
|
if not post_url:
|
||||||
|
post_url = self._LOGIN_URL
|
||||||
|
elif not post_url.startswith('http'):
|
||||||
|
post_url = compat_urlparse.urljoin(self._LOGIN_URL, post_url)
|
||||||
|
|
||||||
|
login_form = self._form_hidden_inputs(self._LOGIN_FORM, login_page)
|
||||||
|
|
||||||
|
login_form.update({
|
||||||
|
'login_form[name]': username,
|
||||||
|
'login_form[password]': password,
|
||||||
})
|
})
|
||||||
login_request = sanitized_Request(login_url, data)
|
|
||||||
login_request.add_header('Content-Type', 'application/x-www-form-urlencoded')
|
response = self._download_webpage(
|
||||||
self._download_webpage(login_request, None, False, 'Wrong login info')
|
post_url, None, 'Logging in', 'Wrong login info',
|
||||||
|
data=urlencode_postdata(login_form),
|
||||||
|
headers={'Content-Type': 'application/x-www-form-urlencoded'})
|
||||||
|
|
||||||
|
# Successful login
|
||||||
|
if '<title>Redirecting' in response:
|
||||||
|
return
|
||||||
|
|
||||||
|
error = self._html_search_regex(
|
||||||
|
'(?s)<ul[^>]+class=["\']messages["\'][^>]*>(.+?)</ul>',
|
||||||
|
response, 'error message', default=None)
|
||||||
|
if error:
|
||||||
|
raise ExtractorError('Unable to login: %s' % error, expected=True)
|
||||||
|
|
||||||
|
raise ExtractorError('Unable to log in')
|
||||||
|
|
||||||
def _real_initialize(self):
|
def _real_initialize(self):
|
||||||
self._login()
|
self._login()
|
||||||
|
|
Loading…
Reference in New Issue