-
-
Notifications
You must be signed in to change notification settings - Fork 672
✨feat: 增加对了proxy_manger工具类,支持了socks代理支持,并将代理功能封装进工具类 #1400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Sourcery 审查者指南此 Pull Request 引入了一个 设置代理的顺序图sequenceDiagram
participant CoreLifecycle
participant ProxyManager
CoreLifecycle->>ProxyManager: setup_proxy(proxy_url)
alt proxy_url starts with 'socks'
ProxyManager->>ProxyManager: _setup_socks_proxy(proxy_url)
else proxy_url starts with 'http'
ProxyManager->>ProxyManager: _setup_http_proxy(proxy_url)
end
ProxyManager-->>CoreLifecycle: return success
检查端口是否被使用的顺序图sequenceDiagram
participant DashboardServer
participant CoreLifecycle
participant ProxyManager
participant socket
DashboardServer->>CoreLifecycle: check_port_in_use(port)
CoreLifecycle->>ProxyManager: get_direct_socket()
ProxyManager-->>CoreLifecycle: return original_socket
CoreLifecycle->>socket: socket(AF_INET, SOCK_STREAM)
socket->>socket: connect_ex(("127.0.0.1", port))
socket-->>CoreLifecycle: return result
CoreLifecycle-->>DashboardServer: return result == 0
ProxyManager 的类图classDiagram
class ProxyManager {
-original_socket
-current_proxy
-is_socks_proxy
+__init__()
+setup_proxy(proxy_url: Optional[str]) bool
-_setup_socks_proxy(proxy_url: str) bool
-_setup_http_proxy(proxy_url: str) bool
+clear_proxy() None
-_clear_proxy_env() None
+get_current_proxy() Optional[str]
+is_using_proxy() bool
+setup_no_proxy_hosts(hosts: list = None) None
+get_direct_socket()
}
文件级别变更
可能相关的 issue
提示和命令与 Sourcery 互动
自定义您的体验访问您的 仪表板 以:
获得帮助Original review guide in EnglishReviewer's Guide by SourceryThis pull request introduces a Sequence diagram for setting up a proxysequenceDiagram
participant CoreLifecycle
participant ProxyManager
CoreLifecycle->>ProxyManager: setup_proxy(proxy_url)
alt proxy_url starts with 'socks'
ProxyManager->>ProxyManager: _setup_socks_proxy(proxy_url)
else proxy_url starts with 'http'
ProxyManager->>ProxyManager: _setup_http_proxy(proxy_url)
end
ProxyManager-->>CoreLifecycle: return success
Sequence diagram for checking port in usesequenceDiagram
participant DashboardServer
participant CoreLifecycle
participant ProxyManager
participant socket
DashboardServer->>CoreLifecycle: check_port_in_use(port)
CoreLifecycle->>ProxyManager: get_direct_socket()
ProxyManager-->>CoreLifecycle: return original_socket
CoreLifecycle->>socket: socket(AF_INET, SOCK_STREAM)
socket->>socket: connect_ex(("127.0.0.1", port))
socket-->>CoreLifecycle: return result
CoreLifecycle-->>DashboardServer: return result == 0
Class diagram for ProxyManagerclassDiagram
class ProxyManager {
-original_socket
-current_proxy
-is_socks_proxy
+__init__()
+setup_proxy(proxy_url: Optional[str]) bool
-_setup_socks_proxy(proxy_url: str) bool
-_setup_http_proxy(proxy_url: str) bool
+clear_proxy() None
-_clear_proxy_env() None
+get_current_proxy() Optional[str]
+is_using_proxy() bool
+setup_no_proxy_hosts(hosts: list = None) None
+get_direct_socket()
}
File-Level Changes
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
嘿 @AliveGh0st - 我已经查看了你的更改 - 这里有一些反馈:
总体评论:
- 考虑在
ProxyManager
中添加一个方法来检索代理配置作为字典,以便更轻松地访问。 - 可以通过从配置文件中读取默认值来改进
ProxyManager
中的setup_no_proxy_hosts
方法。
这是我在审查期间查看的内容
- 🟡 一般问题:发现 2 个问题
- 🟢 安全性:一切看起来都不错
- 🟢 测试:一切看起来都不错
- 🟡 复杂性:发现 1 个问题
- 🟢 文档:一切看起来都不错
帮助我更有用!请点击每个评论上的 👍 或 👎,我将使用反馈来改进你的评论。
Original comment in English
Hey @AliveGh0st - I've reviewed your changes - here's some feedback:
Overall Comments:
- Consider adding a method to
ProxyManager
to retrieve the proxy configuration as a dictionary for easier access. - The
setup_no_proxy_hosts
method inProxyManager
could be improved by reading default values from a configuration file.
Here's what I looked at during the review
- 🟡 General issues: 2 issues found
- 🟢 Security: all looks good
- 🟢 Testing: all looks good
- 🟡 Complexity: 1 issue found
- 🟢 Documentation: all looks good
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
眼花了以为是self.astrbot_config["proxy"] Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
修改配置文件之后,尽量考虑一下前向兼容性(比如之前设置了代理的用户在更新了项目之后就会因为这个改动而使得代理失效)。 比如可以同时检测 http_proxy 的值。但是 proxy 的值的优先级大于 http_proxy 的。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
另:socks代理存在url内包含用户名和密码的情况,可以考虑支持
大佬,您好,按照文档使用 Docker 部署 AstrBot,如何配置socks代理处理异地登录问题 |
解决了 #1268
Motivation
代理设置管理方面有几个问题:
core_lifecycle.py
中,增加了该类的复杂度,违反单一职责原则check_port_in_use
的connect_ex(("127.0.0.1", port))
返回结果总会是0,因为该函数通过判断socket能否正常连接来检查端口是否被占用,而socket类在初始化时已经被替换为socks代理,本地回环地址也会通过代理。Modifications
astrbot/core/utils/proxy_manager.py
,将代理相关功能封装到ProxyManager
类中core_lifecycle.py
,使用新的代理管理器替换原有的代理设置逻辑check_port_in_use
函数,使其使用未被代理修改的原始socket进行端口检测httpx[socks]>=0.28.1
和pysocks>=1.7.1
作为依赖,以支持使用httpx库的组件(如Google Generative AI)通过SOCKS代理连接过程中发现的其他问题(未修改)
check_port_in_use
函数始终使用connect_ex(("127.0.0.1", port))
,只检测了127.0.0.1本地回环地址的端口是否被占用,当host设置为其他地址时该函数并不能发挥预期的效果。Check
requirements.txt
和pyproject.toml
文件相应位置。好的,这是将pull request summary翻译成中文的结果:
Sourcery 总结
重构代理管理,引入专用的 ProxyManager 实用程序类,增强对 HTTP 和 SOCKS 代理的支持
新特性:
Bug 修复:
增强功能:
部署:
Original summary in English
Summary by Sourcery
Refactor proxy management by introducing a dedicated ProxyManager utility class with enhanced support for HTTP and SOCKS proxies
New Features:
Bug Fixes:
Enhancements:
Deployment: