aboutsummaryrefslogtreecommitdiff
path: root/yt_dlp/networking/_helper.py
diff options
context:
space:
mode:
authorcoletdjnz <coletdjnz@protonmail.com>2023-10-14 12:33:00 +1300
committerGitHub <noreply@github.com>2023-10-13 23:33:00 +0000
commit8a8b54523addf46dfd50ef599761a81bc22362e6 (patch)
treef6f7d31d0ee51dfe732d26e26c294829b6c5ed5b /yt_dlp/networking/_helper.py
parent700444c23ddb65f618c2abd942acdc0c58c650b1 (diff)
[rh:requests] Add handler for `requests` HTTP library (#3668)
Adds support for HTTPS proxies and persistent connections (keep-alive) Closes https://github.com/yt-dlp/yt-dlp/issues/1890 Resolves https://github.com/yt-dlp/yt-dlp/issues/4070 Resolves https://github.com/ytdl-org/youtube-dl/issues/32549 Resolves https://github.com/ytdl-org/youtube-dl/issues/14523 Resolves https://github.com/ytdl-org/youtube-dl/issues/13734 Authored by: coletdjnz, Grub4K, bashonly
Diffstat (limited to 'yt_dlp/networking/_helper.py')
-rw-r--r--yt_dlp/networking/_helper.py20
1 files changed, 19 insertions, 1 deletions
diff --git a/yt_dlp/networking/_helper.py b/yt_dlp/networking/_helper.py
index 4c9dbf25d..a6fa3550b 100644
--- a/yt_dlp/networking/_helper.py
+++ b/yt_dlp/networking/_helper.py
@@ -11,7 +11,7 @@ import urllib.request
from .exceptions import RequestError, UnsupportedRequest
from ..dependencies import certifi
-from ..socks import ProxyType
+from ..socks import ProxyType, sockssocket
from ..utils import format_field, traverse_obj
if typing.TYPE_CHECKING:
@@ -224,6 +224,24 @@ def _socket_connect(ip_addr, timeout, source_address):
raise
+def create_socks_proxy_socket(dest_addr, proxy_args, proxy_ip_addr, timeout, source_address):
+ af, socktype, proto, canonname, sa = proxy_ip_addr
+ sock = sockssocket(af, socktype, proto)
+ try:
+ connect_proxy_args = proxy_args.copy()
+ connect_proxy_args.update({'addr': sa[0], 'port': sa[1]})
+ sock.setproxy(**connect_proxy_args)
+ if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: # noqa: E721
+ sock.settimeout(timeout)
+ if source_address:
+ sock.bind(source_address)
+ sock.connect(dest_addr)
+ return sock
+ except socket.error:
+ sock.close()
+ raise
+
+
def create_connection(
address,
timeout=socket._GLOBAL_DEFAULT_TIMEOUT,