summaryrefslogtreecommitdiff
path: root/youtube_dl/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'youtube_dl/utils.py')
-rw-r--r--youtube_dl/utils.py22
1 files changed, 21 insertions, 1 deletions
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 61b94d84c4..c249e71681 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -2182,8 +2182,28 @@ def sanitize_url(url):
return url
+def extract_basic_auth(url):
+ parts = compat_urllib_parse.urlsplit(url)
+ if parts.username is None:
+ return url, None
+ url = compat_urllib_parse.urlunsplit(parts._replace(netloc=(
+ parts.hostname if parts.port is None
+ else '%s:%d' % (parts.hostname, parts.port))))
+ auth_payload = base64.b64encode(
+ ('%s:%s' % (parts.username, parts.password or '')).encode('utf-8'))
+ return url, 'Basic {0}'.format(auth_payload.decode('ascii'))
+
+
def sanitized_Request(url, *args, **kwargs):
- return compat_urllib_request.Request(escape_url(sanitize_url(url)), *args, **kwargs)
+ url, auth_header = extract_basic_auth(escape_url(sanitize_url(url)))
+ if auth_header is not None:
+ headers = args[1] if len(args) > 1 else kwargs.get('headers')
+ headers = headers or {}
+ headers['Authorization'] = auth_header
+ if len(args) <= 1 and kwargs.get('headers') is None:
+ kwargs['headers'] = headers
+ kwargs = compat_kwargs(kwargs)
+ return compat_urllib_request.Request(url, *args, **kwargs)
def expand_path(s):