[compat] Add compat_urllib_request_Request
authorSergey M․ <dstftw@gmail.com>
Thu, 19 Nov 2015 21:08:01 +0000 (03:08 +0600)
committerSergey M․ <dstftw@gmail.com>
Mon, 23 Nov 2015 15:55:12 +0000 (21:55 +0600)
This is actually not a compatibility routine but rather a workaround for URLs without protocol specified.
The protocol-less URL is treated as HTTP one since it's most probable scenario and it will most likely to
redirect to HTTPS if HTTPS was actually expected. This routine could also be useful for any Request
preprocessing that may be added in future.

youtube_dl/compat.py

index a3e85264acda8dbefe0883ea50c901302d01d29f..4e3de7f5170022bbab637b8163cd0d67cc00719e 100644 (file)
@@ -198,6 +198,14 @@ except ImportError:  # Python < 3.4
 
             return compat_urllib_response.addinfourl(io.BytesIO(data), headers, url)
 
+
+# Prepend protocol-less URLs with `http:` scheme in order to mitigate the number of
+# unwanted failures due to missing protocol
+def compat_urllib_request_Request(url, *args, **kwargs):
+    return compat_urllib_request.Request(
+        'http:%s' % url if url.startswith('//') else url, *args, **kwargs)
+
+
 try:
     compat_basestring = basestring  # Python 2
 except NameError: