[utils] Prevent override of custom headers.
authorJohannes Knoedtel <johannes@dev-baron.de>
Mon, 12 Jan 2015 21:26:20 +0000 (22:26 +0100)
committerJohannes Knoedtel <johannes@dev-baron.de>
Mon, 12 Jan 2015 21:38:51 +0000 (22:38 +0100)
The dict of headers of request objects in urllib has its keys always
capitalized.

This causes the lookup to fail and overwrite the header. If for example
a Extractor tries to add a "User-Agent" header the internal
representation in the request object is "User-agent". The header is
therefore clobbered by the "User-Agent" in std_headers, because the
strings are not equal.

youtube_dl/utils.py

index 98732e8e99036b32eaa7b802a1ed028e85e0f7ae..daf94abd1d541d77e8b74f0f17e6fde780b054e8 100644 (file)
@@ -611,7 +611,9 @@ class YoutubeDLHandler(compat_urllib_request.HTTPHandler):
 
     def http_request(self, req):
         for h, v in std_headers.items():
-            if h not in req.headers:
+            # Capitalize is needed because of Python bug 2275: http://bugs.python.org/issue2275
+            # The dict keys are capitalized because of this bug by urllib
+            if h.capitalize() not in req.headers:
                 req.add_header(h, v)
         if 'Youtubedl-no-compression' in req.headers:
             if 'Accept-encoding' in req.headers: