mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-03-09 12:50:23 -05:00
Be able to accept callable proxies, that change for each request
This commit is contained in:
parent
0bb3978862
commit
7595f4479e
2 changed files with 15 additions and 1 deletions
|
@ -267,7 +267,16 @@ def _get_cookiejar(self, request):
|
|||
return self.cookiejar if cookiejar is None else cookiejar
|
||||
|
||||
def _get_proxies(self, request):
|
||||
return (request.proxies or self.proxies).copy()
|
||||
if request.proxies:
|
||||
return request.proxies.copy()
|
||||
|
||||
proxies = dict()
|
||||
for proxy_key, proxy_url in self.proxies.items():
|
||||
# Proxy url can be a callable
|
||||
if isinstance(proxy_url, typing.Callable):
|
||||
proxy_url = proxy_url()
|
||||
proxies[proxy_key] = proxy_url
|
||||
return proxies
|
||||
|
||||
def _check_url_scheme(self, request: Request):
|
||||
scheme = urllib.parse.urlparse(request.url).scheme.lower()
|
||||
|
@ -300,6 +309,8 @@ def _check_proxies(self, proxies):
|
|||
# Skip proxy scheme checks
|
||||
continue
|
||||
|
||||
if isinstance(proxy_url, typing.Callable):
|
||||
proxy_url = proxy_url()
|
||||
try:
|
||||
if urllib.request._parse_proxy(proxy_url)[0] is None:
|
||||
# Scheme-less proxies are not supported
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import collections
|
||||
import random
|
||||
import typing
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
|
||||
|
@ -99,6 +100,8 @@ def clean_proxies(proxies: dict, headers: HTTPHeaderDict):
|
|||
if proxy_key == 'no': # special case
|
||||
continue
|
||||
if proxy_url is not None:
|
||||
if isinstance(proxy_url, typing.Callable):
|
||||
proxy_url = proxy_url()
|
||||
# Ensure proxies without a scheme are http.
|
||||
try:
|
||||
proxy_scheme = urllib.request._parse_proxy(proxy_url)[0]
|
||||
|
|
Loading…
Reference in a new issue