Fixed proxies

This commit is contained in:
2026-04-24 13:43:30 +03:00
parent fc1bea562a
commit 8c441b2aec
3 changed files with 52 additions and 2 deletions

View File

@@ -191,8 +191,9 @@ class HybridSessionAuth:
}
)
if self._settings.proxy.enabled:
proxy_url = self._settings.proxy.server
session.proxies.update({"http": proxy_url, "https": proxy_url})
proxies = self._settings.proxy.to_requests_proxies()
if proxies:
session.proxies.update(proxies)
with self._lock:
self._bootstrap_session_cookies(session)
self._thread_local.session = session

View File

@@ -2,6 +2,7 @@ import json
import os
from dataclasses import dataclass, field
from pathlib import Path
from urllib.parse import quote, urlsplit, urlunsplit
from dotenv import load_dotenv
@@ -331,6 +332,32 @@ class ProxyConfig:
result["password"] = self.password
return result
def to_requests_proxy_url(self) -> str | None:
if not self.server:
return None
if not self.username:
return self.server
parts = urlsplit(self.server)
if not parts.scheme or not parts.hostname:
return self.server
username = quote(self.username, safe="")
password = quote(self.password or "", safe="")
host = parts.hostname
if ":" in host and not host.startswith("["):
host = f"[{host}]"
if parts.port is not None:
host = f"{host}:{parts.port}"
netloc = f"{username}:{password}@{host}"
return urlunsplit((parts.scheme, netloc, parts.path, parts.query, parts.fragment))
def to_requests_proxies(self) -> dict[str, str] | None:
proxy_url = self.to_requests_proxy_url()
if not proxy_url:
return None
return {"http": proxy_url, "https": proxy_url}
# Главный объект настроек: собирает все блоки конфигурации