1
0
mirror of https://github.com/yt-dlp/yt-dlp.git synced 2025-07-08 22:38:33 +00:00

Add --url-prefix option to prepend a URL prefix to all request URLs

This commit is contained in:
ugo-studio 2025-03-21 11:20:54 +01:00
parent 2ee3a0aff9
commit 6b20edd3c8
6 changed files with 27 additions and 2 deletions

View File

@ -393,6 +393,13 @@ ## Network Options:
e.g. socks5://user:pass@127.0.0.1:1080/.
Pass in an empty string (--proxy "") for
direct connection
--url-prefix URL Prepend the specified URL prefix to every request URL.
For example, if you set the URL prefix to
`http://127.0.0.1:1080/`, a request originally aimed at
`https://url.com` will be modified to
`http://127.0.0.1:1080/https://url.com`.
pass in an empty string (i.e., `--url-prefix ""`) to use
the original request URLs directly
--socket-timeout SECONDS Time to wait before giving up, in seconds
--source-address IP Client-side IP address to bind to
--impersonate CLIENT[:OS] Client to impersonate for requests. E.g.

View File

@ -360,6 +360,7 @@ class YoutubeDL:
enable_file_urls: Enable file:// URLs. This is disabled by default for security reasons.
http_headers: A dictionary of custom headers to be used for all requests
proxy: URL of the proxy server to use
url_prefix: Prepend the specified URL prefix to every request URL
geo_verification_proxy: URL of the proxy to use for IP address verification
on geo-restricted sites.
socket_timeout: Time to wait for unresponsive hosts, in seconds
@ -4231,7 +4232,7 @@ def build_request_director(self, handlers, preferences=None):
clean_headers(headers)
clean_proxies(proxies, headers)
director = RequestDirector(logger=logger, verbose=self.params.get('debug_printtraffic'))
director = RequestDirector(url_prefix=self.params.get('url_prefix'), logger=logger, verbose=self.params.get('debug_printtraffic'))
for handler in handlers:
director.add_handler(handler(
logger=logger,

View File

@ -920,6 +920,7 @@ def parse_options(argv=None):
'enable_file_urls': opts.enable_file_urls,
'http_headers': opts.headers,
'proxy': opts.proxy,
'url_prefix': opts.url_prefix,
'socket_timeout': opts.socket_timeout,
'bidi_workaround': opts.bidi_workaround,
'debug_printtraffic': opts.debug_printtraffic,

View File

@ -227,6 +227,10 @@ def rebuild_auth(self, prepared_request, response):
del response._real_status_code
return super().rebuild_auth(prepared_request, response)
def send(self, request, **kwargs):
print(f'Requesting URL: {request.url}') # Print each URL before sending the request
return super().send(request, **kwargs)
class Urllib3LoggingFilter(logging.Filter):

View File

@ -61,9 +61,10 @@ class RequestDirector:
@param verbose: Print debug request information to stdout.
"""
def __init__(self, logger, verbose=False):
def __init__(self, url_prefix, logger, verbose=False):
self.handlers: dict[str, RequestHandler] = {}
self.preferences: set[Preference] = set()
self.url_prefix = url_prefix
self.logger = logger # TODO(Grub4k): default logger
self.verbose = verbose
@ -100,6 +101,10 @@ def send(self, request: Request) -> Response:
assert isinstance(request, Request)
# Add url_prefix to request url
if self.url_prefix:
request.url = f'{self.url_prefix}{request.url}'
unexpected_errors = []
unsupported_errors = []
for handler in self._get_handlers(request):

View File

@ -526,6 +526,13 @@ def _alias_callback(option, opt_str, value, parser, opts, nargs):
help=(
'Use the specified HTTP/HTTPS/SOCKS proxy. To enable SOCKS proxy, specify a proper scheme, '
'e.g. socks5://user:pass@127.0.0.1:1080/. Pass in an empty string (--proxy "") for direct connection'))
network.add_option(
'--url-prefix', dest='url_prefix',
default=None, metavar='URL',
help=(
'Prepend the specified URL prefix to every request URL. For example, if you set the URL prefix to `http://127.0.0.1:1080/`, '
'a request originally aimed at `https://request.url` will be modified to `http://127.0.0.1:1080/https://request.url`. '
'pass in an empty string (i.e., `--url-prefix ""`) to use the original request URLs directly'))
network.add_option(
'--socket-timeout',
dest='socket_timeout', type=float, default=None, metavar='SECONDS',