aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Hagemeister <phihag@phihag.de>2015-03-03 13:56:06 +0100
committerPhilipp Hagemeister <phihag@phihag.de>2015-03-03 13:56:06 +0100
commit2461f79d2ad9eee44644f6187e366125a29aa70f (patch)
tree9c8490ac92b196f1d9feb5a49b4d6d31809c2879
parent91410c9bfa9fd8f01fb817474bcc7b0db5cabf95 (diff)
downloadyoutube-dl-2461f79d2ad9eee44644f6187e366125a29aa70f.tar.xz
[utils] Correct per-request proxy handling
-rwxr-xr-xyoutube_dl/YoutubeDL.py3
-rw-r--r--youtube_dl/extractor/letv.py10
-rw-r--r--youtube_dl/utils.py15
3 files changed, 17 insertions, 11 deletions
diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py
index 915963d96..df2aebb59 100755
--- a/youtube_dl/YoutubeDL.py
+++ b/youtube_dl/YoutubeDL.py
@@ -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)
diff --git a/youtube_dl/extractor/letv.py b/youtube_dl/extractor/letv.py
index fd5fd260e..85eee141b 100644
--- a/youtube_dl/extractor/letv.py
+++ b/youtube_dl/extractor/letv.py
@@ -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,
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index b568288fa..7426e2a1f 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -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)