diff options
author | Simon Sawicki <contact@grub4k.xyz> | 2025-03-03 00:10:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-03 00:10:01 +0100 |
commit | 7d18fed8f1983fe6de4ddc810dfb2761ba5744ac (patch) | |
tree | b090448b1098b43359a0ce87c531bb54178482ca /yt_dlp/networking/impersonate.py | |
parent | 79ec2fdff75c8c1bb89b550266849ad4dec48dd3 (diff) |
[networking] Add `keep_header_casing` extension (#11652)
Authored by: coletdjnz, Grub4K
Co-authored-by: coletdjnz <coletdjnz@protonmail.com>
Diffstat (limited to 'yt_dlp/networking/impersonate.py')
-rw-r--r-- | yt_dlp/networking/impersonate.py | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/yt_dlp/networking/impersonate.py b/yt_dlp/networking/impersonate.py index 0626b3b49..b90d10b76 100644 --- a/yt_dlp/networking/impersonate.py +++ b/yt_dlp/networking/impersonate.py @@ -5,11 +5,11 @@ from abc import ABC from dataclasses import dataclass from typing import Any -from .common import RequestHandler, register_preference +from .common import RequestHandler, register_preference, Request from .exceptions import UnsupportedRequest from ..compat.types import NoneType from ..utils import classproperty, join_nonempty -from ..utils.networking import std_headers +from ..utils.networking import std_headers, HTTPHeaderDict @dataclass(order=True, frozen=True) @@ -123,7 +123,17 @@ class ImpersonateRequestHandler(RequestHandler, ABC): """Get the requested target for the request""" return self._resolve_target(request.extensions.get('impersonate') or self.impersonate) - def _get_impersonate_headers(self, request): + def _prepare_impersonate_headers(self, request: Request, headers: HTTPHeaderDict) -> None: # noqa: B027 + """Additional operations to prepare headers before building. To be extended by subclasses. + @param request: Request object + @param headers: Merged headers to prepare + """ + + def _get_impersonate_headers(self, request: Request) -> dict[str, str]: + """ + Get headers for external impersonation use. + Subclasses may define a _prepare_impersonate_headers method to modify headers after merge but before building. + """ headers = self._merge_headers(request.headers) if self._get_request_target(request) is not None: # remove all headers present in std_headers @@ -131,7 +141,11 @@ class ImpersonateRequestHandler(RequestHandler, ABC): for k, v in std_headers.items(): if headers.get(k) == v: headers.pop(k) - return headers + + self._prepare_impersonate_headers(request, headers) + if request.extensions.get('keep_header_casing'): + return headers.sensitive() + return dict(headers) @register_preference(ImpersonateRequestHandler) |