mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[twitch] Fix authentication (closes #17024)
This commit is contained in:
		| @@ -4,6 +4,7 @@ from __future__ import unicode_literals | ||||
| import itertools | ||||
| import re | ||||
| import random | ||||
| import json | ||||
|  | ||||
| from .common import InfoExtractor | ||||
| from ..compat import ( | ||||
| @@ -26,7 +27,6 @@ from ..utils import ( | ||||
|     try_get, | ||||
|     unified_timestamp, | ||||
|     update_url_query, | ||||
|     urlencode_postdata, | ||||
|     url_or_none, | ||||
|     urljoin, | ||||
| ) | ||||
| @@ -37,7 +37,8 @@ class TwitchBaseIE(InfoExtractor): | ||||
|  | ||||
|     _API_BASE = 'https://api.twitch.tv' | ||||
|     _USHER_BASE = 'https://usher.ttvnw.net' | ||||
|     _LOGIN_URL = 'https://www.twitch.tv/login' | ||||
|     _LOGIN_FORM_URL = 'https://www.twitch.tv/login' | ||||
|     _LOGIN_POST_URL = 'https://passport.twitch.tv/login' | ||||
|     _CLIENT_ID = 'jzkbprff40iqj646a697cyrvl0zt2m6' | ||||
|     _NETRC_MACHINE = 'twitch' | ||||
|  | ||||
| @@ -77,21 +78,25 @@ class TwitchBaseIE(InfoExtractor): | ||||
|             page_url = urlh.geturl() | ||||
|             post_url = self._search_regex( | ||||
|                 r'<form[^>]+action=(["\'])(?P<url>.+?)\1', page, | ||||
|                 'post url', default=page_url, group='url') | ||||
|                 'post url', default=self._LOGIN_POST_URL, group='url') | ||||
|             post_url = urljoin(page_url, post_url) | ||||
|  | ||||
|             headers = {'Referer': page_url} | ||||
|             headers = { | ||||
|                 'Referer': page_url, | ||||
|                 'Origin': page_url, | ||||
|                 'Content-Type': 'text/plain;charset=UTF-8' | ||||
|             } | ||||
|  | ||||
|             try: | ||||
|                 response = self._download_json( | ||||
|                     post_url, None, note, | ||||
|                     data=urlencode_postdata(form), | ||||
|                     data=json.dumps(form).encode(), | ||||
|                     headers=headers) | ||||
|             except ExtractorError as e: | ||||
|                 if isinstance(e.cause, compat_HTTPError) and e.cause.code == 400: | ||||
|                     response = self._parse_json( | ||||
|                         e.cause.read().decode('utf-8'), None) | ||||
|                     fail(response.get('message') or response['errors'][0]) | ||||
|                     fail(response.get('error_description') or response.get('error_code')) | ||||
|                 raise | ||||
|  | ||||
|             if 'Authenticated successfully' in response.get('message', ''): | ||||
| @@ -105,7 +110,7 @@ class TwitchBaseIE(InfoExtractor): | ||||
|                 headers=headers) | ||||
|  | ||||
|         login_page, handle = self._download_webpage_handle( | ||||
|             self._LOGIN_URL, None, 'Downloading login page') | ||||
|             self._LOGIN_FORM_URL, None, 'Downloading login page') | ||||
|  | ||||
|         # Some TOR nodes and public proxies are blocked completely | ||||
|         if 'blacklist_message' in login_page: | ||||
| @@ -115,6 +120,7 @@ class TwitchBaseIE(InfoExtractor): | ||||
|             login_page, handle, 'Logging in', { | ||||
|                 'username': username, | ||||
|                 'password': password, | ||||
|                 'client_id': self._CLIENT_ID, | ||||
|             }) | ||||
|  | ||||
|         # Successful login | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Tim Broder
					Tim Broder