[utils] Correct per-request proxy handling
authorPhilipp Hagemeister <phihag@phihag.de>
Tue, 3 Mar 2015 12:56:06 +0000 (13:56 +0100)
committerPhilipp Hagemeister <phihag@phihag.de>
Tue, 3 Mar 2015 12:56:06 +0000 (13:56 +0100)
youtube_dl/YoutubeDL.py
youtube_dl/extractor/letv.py
youtube_dl/utils.py

index 915963d96a6b06fbc0c809d8c1afb73ba27770d0..df2aebb59f836e7255ccaa6fcce545154d58b65d 100755 (executable)
@@ -1771,7 +1771,8 @@ class YoutubeDL(object):
         https_handler = make_HTTPS_handler(self.params, debuglevel=debuglevel)
         ydlh = YoutubeDLHandler(self.params, debuglevel=debuglevel)
         opener = compat_urllib_request.build_opener(
-            https_handler, proxy_handler, cookie_processor, ydlh)
+            proxy_handler, https_handler, cookie_processor, ydlh)
+
         # Delete the default user-agent header, which would otherwise apply in
         # cases where our custom HTTP handler doesn't come into play
         # (See https://github.com/rg3/youtube-dl/issues/1309 for details)
index fd5fd260e9e40baf294815d9b42c363d0f482380..85eee141b119519e9a6aac9a2fd8bfb1e05419a0 100644 (file)
@@ -40,9 +40,6 @@ class LetvIE(InfoExtractor):
             'title': '美人天下01',
             'description': 'md5:f88573d9d7225ada1359eaf0dbf8bcda',
         },
-        'expected_warnings': [
-            'publish time'
-        ]
     }, {
         'note': 'This video is available only in Mainland China, thus a proxy is needed',
         'url': 'http://www.letv.com/ptv/vplay/1118082.html',
@@ -53,11 +50,8 @@ class LetvIE(InfoExtractor):
             'title': '与龙共舞 完整版',
             'description': 'md5:7506a5eeb1722bb9d4068f85024e3986',
         },
-        'expected_warnings': [
-            'publish time'
-        ],
         'params': {
-            'cn_verification_proxy': 'proxy.uku.im:8888'
+            'cn_verification_proxy': 'http://proxy.uku.im:8888'
         },
     }]
 
@@ -95,7 +89,7 @@ class LetvIE(InfoExtractor):
             'http://api.letv.com/mms/out/video/playJson?' + compat_urllib_parse.urlencode(params)
         )
         play_json_req.add_header(
-            'Ytdl-Request-Proxy',
+            'Ytdl-request-proxy',
             self._downloader.params.get('cn_verification_proxy'))
         play_json = self._download_json(
             play_json_req,
index b568288faad1e3a0b09f240edfa1f89301799125..7426e2a1ffcdafb79ca026b7b0d5256c6b99739a 100644 (file)
@@ -1771,10 +1771,21 @@ def match_filter_func(filter_str):
 
 
 class PerRequestProxyHandler(compat_urllib_request.ProxyHandler):
+    def __init__(self, proxies=None):
+        # Set default handlers
+        for type in ('http', 'https'):
+            setattr(self, '%s_open' % type,
+                    lambda r, proxy='__noproxy__', type=type, meth=self.proxy_open:
+                        meth(r, proxy, type))
+        return compat_urllib_request.ProxyHandler.__init__(self, proxies)
+
     def proxy_open(self, req, proxy, type):
-        req_proxy = req.headers.get('Ytdl-Request-Proxy')
+        req_proxy = req.headers.get('Ytdl-request-proxy')
         if req_proxy is not None:
             proxy = req_proxy
-            del req.headers['Ytdl-Request-Proxy']
+            del req.headers['Ytdl-request-proxy']
+
+        if proxy == '__noproxy__':
+            return None  # No Proxy
         return compat_urllib_request.ProxyHandler.proxy_open(
             self, req, proxy, type)