From bbc8d5bf9a379fcbd2c23980920acc3ec4abfb09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E6=9C=88=E7=A7=8B=E8=A7=81=E5=BF=83?= <10618381+NullYing@users.noreply.github.com> Date: Tue, 22 Oct 2024 23:18:13 +0800 Subject: [PATCH 1/2] Update request_url.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 使用requests官方推荐使用socks5,避免污染全局socket;https://requests.readthedocs.io/en/latest/user/advanced/#socks --- backend/src/module/network/request_url.py | 27 +++++++++-------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/backend/src/module/network/request_url.py b/backend/src/module/network/request_url.py index 0b85e77e0..685218e5a 100644 --- a/backend/src/module/network/request_url.py +++ b/backend/src/module/network/request_url.py @@ -1,9 +1,7 @@ import logging -import socket import time import requests -import socks from module.conf import settings @@ -13,7 +11,6 @@ class RequestURL: def __init__(self): self.header = {"user-agent": "Mozilla/5.0", "Accept": "application/xml"} - self._socks5_proxy = False def get_url(self, url, retry=3): try_time = 0 @@ -102,23 +99,19 @@ def __enter__(self): "https": url, } elif settings.proxy.type == "socks5": - self._socks5_proxy = True - socks.set_default_proxy( - socks.SOCKS5, - addr=settings.proxy.host, - port=settings.proxy.port, - rdns=True, - username=settings.proxy.username, - password=settings.proxy.password, - ) - socket.socket = socks.socksocket + if settings.proxy.username: + self.session.proxies = { + "http": f"socks5://{username}:{password}@{settings.proxy.host}:{settings.proxy.port}", + "https": f"socks5://{username}:{password}@{settings.proxy.host}:{settings.proxy.port}", + } + else: + self.session.proxies = { + "http": f"socks5://{settings.proxy.host}:{settings.proxy.port}", + "https": f"socks5://{settings.proxy.host}:{settings.proxy.port}", + } else: logger.error(f"[Network] Unsupported proxy type: {settings.proxy.type}") return self def __exit__(self, exc_type, exc_val, exc_tb): - if self._socks5_proxy: - socks.set_default_proxy() - socket.socket = socks.socksocket - self._socks5_proxy = False self.session.close() From 055aa72942d8888136c544bf359b4ac08a04a977 Mon Sep 17 00:00:00 2001 From: WeijiangChen Date: Tue, 22 Oct 2024 23:26:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=B2=BE=E7=AE=80=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/module/network/request_url.py | 38 +++++++++-------------- 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/backend/src/module/network/request_url.py b/backend/src/module/network/request_url.py index 685218e5a..bdb6ab507 100644 --- a/backend/src/module/network/request_url.py +++ b/backend/src/module/network/request_url.py @@ -84,33 +84,23 @@ def __enter__(self): self.session = requests.Session() if settings.proxy.enable: if "http" in settings.proxy.type: - if settings.proxy.username: - username=settings.proxy.username - password=settings.proxy.password - url = f"http://{username}:{password}@{settings.proxy.host}:{settings.proxy.port}" - self.session.proxies = { - "http": url, - "https": url, - } - else: - url = f"http://{settings.proxy.host}:{settings.proxy.port}" - self.session.proxies = { - "http": url, - "https": url, - } + protocol = "http" elif settings.proxy.type == "socks5": - if settings.proxy.username: - self.session.proxies = { - "http": f"socks5://{username}:{password}@{settings.proxy.host}:{settings.proxy.port}", - "https": f"socks5://{username}:{password}@{settings.proxy.host}:{settings.proxy.port}", - } - else: - self.session.proxies = { - "http": f"socks5://{settings.proxy.host}:{settings.proxy.port}", - "https": f"socks5://{settings.proxy.host}:{settings.proxy.port}", - } + protocol = "socks5" else: logger.error(f"[Network] Unsupported proxy type: {settings.proxy.type}") + return self + + username = settings.proxy.username + password = settings.proxy.password + if username: + url = f"{protocol}://{username}:{password}@{settings.proxy.host}:{settings.proxy.port}" + else: + url = f"{protocol}://{settings.proxy.host}:{settings.proxy.port}" + self.session.proxies = { + "http": url, + "https": url, + } return self def __exit__(self, exc_type, exc_val, exc_tb):